zoukankan      html  css  js  c++  java
  • 【kmp算法】C++代码实现

    推荐先在B站搜索KMP看一个印度小哥讲解的视频:

    https://www.bilibili.com/video/BV1Ys411d7yh

    【强烈推荐,看一两遍就懂了】

    代码借鉴:

    http://blog.csdn.net/weixin_41106545/article/details/83573340

    //KMP substring search
    
    #include <iostream>
    #include<vector>
    #include<string>
    using namespace std;
    
    //以下即NEXT数组的实现 vector
    <int> getTempArray(string pattern){ vector<int> result;//声明返回的vector if(pattern.size()==0 || pattern.size()==1){ return result; //如果字符串的长度为0,直接返回空的vector //如果字符串的长度为1,直接返回此时的vector } result.push_back(0);//首先压入0 int j=0; int i=1; while(j < pattern.size()-1 && i <= pattern.size()-1){ if(pattern[i] == pattern[j]){ result.push_back(j+1); i++; j++; } else{ if(j==0){ result.push_back(0); i++; } else{ while(j>=1 && pattern[i] != pattern[j]){ j = result[j-1]; } if(pattern[i] == pattern[j]){ result.push_back(j+1); i++; j++; } else{ result.push_back(0); j++; } } } } return result; } int kmp (string t, string p)//t:text p:pattern { vector<int> next = getTempArray(p); int j=0; for (int i=0; i<t.length(); i++){ while(j>0 && t[i] != p[j]){ j=next[j-1]; } if(t[i] == p[j]){ j++; } if(j==p.length()){ return i-p.length()+1; } } return -1; } int main(){ string str; cout << "Enter the string:"; cin >> str; string pattern; cout << "Enter the pattern:"; cin >> pattern; int result = kmp(str,pattern); if (result == -1){ cout << "Can't find pattern in the string! "; } else{ cout << result << endl; } }

     

     

  • 相关阅读:
    Two Sum II
    Subarray Sum
    Intersection of Two Arrays
    Reorder List
    Convert Sorted List to Binary Search Tree
    Remove Duplicates from Sorted List II
    Partition List
    Linked List Cycle II
    Sort List
    struts2结果跳转和参数获取
  • 原文地址:https://www.cnblogs.com/P201821430045/p/13715052.html
Copyright © 2011-2022 走看看