28. Implement strStr()
来源:互联网 发布:怎么分析业绩数据? 编辑:程序博客网 时间:2024/06/15 02:22
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
实现strStr()函数。
返回needle在haystack中第一次出现的位置,若needle不在其中则返回-1.
方法一:
int ImplementStrStr::strStr1(string haystack, string needle){ int m = haystack.size(); int n = needle.size(); if (n == 0) return 0; for (int i = 0; i < m - n + 1; i++) { //逐个匹配,一旦不匹配,跳出循环,从下一个字符开始匹配 int j = 0; for (; j < n; j++) { if (haystack[i + j] != needle[j]) break; } if (j == n) return i; } return -1;}
方法二:
KMP算法,具体内容可以从这里了解:
http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html
int ImplementStrStr::strStr2(string haystack, string needle){ int m = haystack.size(); int n = needle.size(); if (n == 0) return 0; //kmp部分匹配表 vector<int> lps = kmpProcess(needle); for (int i = 0, j = 0; i < m;) { if (haystack[i] == needle[j]) { i++; j++; } if (j == n) return i - j; if (i < m && haystack[i] != needle[j]) { //这步很关键 if (j > 0) j = lps[j - 1]; else i++; } } return -1;}//计算kmp部分匹配表//这部分用测试代码调试有利于理解vector<int> ImplementStrStr::kmpProcess(string& needle){ int n = needle.size(); vector<int> lps(n, 0); for (int i = 1, len = 0; i < n;) { if (needle[i] == needle[len]) lps[i++] = ++len; else if (len > 0) len = lps[len - 1]; else lps[i++] = 0; } return lps;}
阅读全文
0 0
- [LeetCode]28.Implement strStr()
- LeetCode --- 28. Implement strStr()
- LeetCode 28.Implement strStr()
- [Leetcode] 28. Implement strStr()
- 28. Implement strStr()
- 【leetcode】28. Implement strStr()
- [leetcode] 28.Implement strStr()
- Leetcode-28.Implement strStr()
- 28. Implement strStr()
- 28. Implement strStr()
- 28. Implement strStr()
- 28. Implement strStr() LeetCode
- 28. Implement strStr()
- leetcode 28. Implement strStr()
- [LeetCode]28. Implement strStr()
- 28. Implement strStr()
- 28. Implement strStr()
- 28. Implement strStr()
- 齐次坐标
- Xcode模拟器快捷键操作
- Linux单元小结(4)
- 筛素数
- 前备知识 -- 使用canvas制作动画
- 28. Implement strStr()
- UVa10917
- 禁止电脑开机自动打开浏览器
- 通过JavaScript获取到导航条中的HTTP信息
- spring boot 自定义properties使用详解
- protocal buffer的一些基本整理
- easyui 中edatagrid 时间类型的修改
- 1297: [SCOI2009]迷路
- USB规范2.0学习(一)