[LeetCode]KMP——字符串匹配
2016-04-24 19:53
405 查看
一、问题描述:
https://leetcode.com/problems/implement-strstr/
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Subscribe to see which companies asked this question
二、实现:
暴力匹配
KMP
注意大坑!
不加(int)的话,由于length()为无符号类型,当j==-1时将会被转化为INT_MAX!
附:KMP讲解 http://blog.csdn.net/v_july_v/article/details/7041827
https://leetcode.com/problems/implement-strstr/
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Subscribe to see which companies asked this question
二、实现:
暴力匹配
int strStr(string haystack, string needle) { if (haystack.length() < needle.length()) { return -1; } if (haystack.length() == needle.length()) { if (haystack == needle) { return 0; } return -1; } for (int i = 0; i < haystack.length()-needle.length()+1; ++i) { string tmp = haystack.substr(i, needle.length()); cout << tmp << endl; if (tmp == needle) { return i; } } return -1; }
KMP
注意大坑!
j<(int)needle.length()
不加(int)的话,由于length()为无符号类型,当j==-1时将会被转化为INT_MAX!
public: int strStr(string haystack, string needle) { if (needle.empty()) return 0; if (haystack.empty()) return -1; if (haystack.length() == needle.length()) { if (haystack == needle) return 0; return -1; } vector<int> nextArray(needle.length(), 0); generateNext(nextArray, needle); int i = 0, j =0; while(i<haystack.length() && j<(int)needle.length()) { if (j==-1 || haystack[i]==needle[j]) { i++; j++; } else j = nextArray[j]; } if (j == needle.length()) return i-j; return -1; } private: void generateNext(vector<int> &nextArray, string needle) { nextArray[0] = -1; int k = -1, j = 0; while(j < needle.length()-1) { if (k==-1 || needle[k]==needle[j]) { k++; j++; if (needle[j] != needle[k]) nextArray[j] = k; else nextArray[j] = nextArray[k]; } else k = nextArray[k]; } }
附:KMP讲解 http://blog.csdn.net/v_july_v/article/details/7041827
相关文章推荐
- hdoj 5101 Select
- Android四大核心组件之Service
- 团队项目:个人工作总结06
- 20145329《Java程序设计》第八周学习总结
- 专题二 总结(搜索)
- 从文本中读取变量的值 文本如下:
- 快速排序
- xshell配色Solarized Dark
- github客户端上传代码 mac 注意事项
- Android eclipse version 52.0报错
- ubuntu安装tomcat
- TP-LINK WR886N路由器登录过程分析
- 各类数据库查询自动增加序号
- flex简单的数据绑定
- 暂停和播放CSS3动画的两种实现方法
- 软件工程进度条-第八周
- LeetCode 258. Add Digits C语言
- Js答辩总结
- 4-20mA放大电路
- 《四个婚礼和一个葬礼》影评