zoukankan      html  css  js  c++  java
  • codeVS1204 寻找子串位置

    KMP。

    一直没有一个裸kmp,根本看不懂kmp。。。//蒟蒻本性。

    kmp的部分匹配值next[j],在这个实现中的意思是,如果b[j+1]和a[i]失配,j=next[j]。

    就是不断返回直到b[j+1]==a[i]。

    计算的话,就用自己匹配自己吧。

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int maxn = 200 + 10;
    
    char a[maxn],b[maxn];
    int next[maxn];
    int n,m,j;
    
    
    int main() {
        scanf("%s%s",a+1,b+1);
        n=strlen(a+1),m=strlen(b+1);
        j=0;
        for(int i=2;i<=m;i++) {
            while(j && b[j+1]!=b[i]) j=next[j];
            if(b[j+1]==b[i]) j++;
            next[i]=j;    
        }
        j=0;
        for(int i=1;i<=n;i++) {
            while(j && b[j+1]!=a[i]) j=next[j];
            if(b[j+1]==a[i]) j++;
            if(j==m) { //匹配成功 
                printf("%d
    ",i-m+1);
                break;
            }
        }
        return 0;
    }
  • 相关阅读:
    php
    图片拖拽
    12.20
    正则详细讲解
    12.19
    正则
    闭包
    date类
    二分查找
    冒泡排序
  • 原文地址:https://www.cnblogs.com/invoid/p/5523916.html
Copyright © 2011-2022 走看看