KMP算法 c++ string
来源:互联网 发布:淘宝酷卡体育东西正嘛 编辑:程序博客网 时间:2024/06/09 19:10
首先是暴力解法:
之前的使用的迭代器的方法,感觉逻辑不是很清楚:
bool com(string &s1, string &s2){ auto it1 = s1.begin(); auto it2 = s2.begin(); //bool f = 0; while (it1!= s1.end()) { auto temp1 = it1; auto temp2 = it2; while (it1 != s1.end()&&*it1++== *it2++) { /*it1++; it2++;*/ if (it2 == s2.end()) return 1; } it1 = ++temp1; it2 = temp2; } return 0;}
下面是没有用迭代器的版本:
bool violentMatch(string s1, string s2){ int t1 = s1.size(); int t2 = s2.size(); int i = 0,j = 0; while (i<t1&&j<t2) { if (s1[i]==s2[j]) { i++; j++; } else { i = i - j + 1; j = 0; } } return j == t2; //return i-j即匹配位置}
下面是KMP算法:
vector<int> getnext(string s){ int t = s.size(); vector<int> next(t); int i = 0, j = -1; next[0] = -1; while (i<t-1) //因为是算的next元素的前缀匹配数 小心越界 { if (j==-1||s[i] == s[j]) // { i++; j++; next[i] = j; } else j = next[j]; } return next;}int KMPMatch(string s1, string s2){ int t1 = s1.size(); int t2 = s2.size(); vector <int> next(getnext(s2)); int i = 0, j = 0; while (i < t1&&j < t2) { if (j == -1 || s1[i] == s2[j]) //注意是j==-1; { i++; j++; } else { j = next[j]; } } if (j == t2) return i - j; return -1;}
阅读全文
0 0
- power string kmp算法
- string KMP算法理解
- KMP算法 c++ string
- [C++] [算法] KMP算法
- (KMP算法)Power String(P2406)
- String KMP算法 JAVA实现
- KMP算法(C)
- C 语言KMP算法
- KMP算法C实现
- KMP算法c实现
- KMP算法 C实现
- KMP算法--C语言
- [C++]KMP算法实现
- KMP算法--C/C++
- KMP算法(C++)
- KMP算法C代码描述
- KMP算法c语言实现
- KMP算法(C语言)
- MPLS 工作原理
- 226. Invert Binary Tree
- [leetcode-9] Palindrome Number
- tomcat启动不来(部署项目跑不起来,单独可以启动)
- HGDB图形界面安装日志的位置
- KMP算法 c++ string
- KD树构建
- 神经网络控制
- 粗糙集基本理论
- 最优控制的理解
- Javascirpt超简单求数组元素的最大值
- 玩黑苹果之路:感谢一路上有你黑苹果社区 https://osx.cx
- WEB-INF目录
- java JUnit单元测试