#include <iostream> #include <string> using namespace std; int b_force_match(string str, string ptr) {     int i, j, temc;     int tlen = ptr.length();     int plen = str.length();     for (i = 0, j = 0; i <= plen - tlen; i++)     {         temc = i;         j = 0;         while (str[temc] == ptr[j] && j < tlen)         {             temc++;             j++;         }         if (j == tlen)             return i;     }     return -1; } void clnext(string str, int *next) {     int len=str.length();     next[0] = -1;     int k = -1;     for (int q = 1; q < len; q++)     {         while (k > -1 && str[k + 1] != str[q])             k = next[k];//回溯         if (str[k + 1] == str[q])            k++;         next[q] = k;     } } int KMP(string str,string ptr) {     int slen=str.length();     int plen=ptr.length();     int *next = new int[plen];     clnext(ptr, next);     int k = -1;     for (int i = 0; i < slen; i++)     {         while (k >-1&& ptr[k + 1] != str[i])             k = next[k];         if (ptr[k + 1] == str[i])             k = k + 1;         if (k == plen-1)         {             delete next;             return i-plen+1;         }     }     delete next;     return -1; } int main() {     string str = "ahraaahahafafderqhgadgdfghadfhnmym,,aryzkiababaabaftyacfabaou";     string ptr = "ababaabaf";     cout << "patternmatch" << endl;     cout << "b_force:" << endl;     cout << b_force_match(str, ptr) << endl;     cout<<"KMP:"<<endl;     cout << KMP(str, ptr) << endl;     return 0; }
点赞 评论

相关推荐

湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务