Leetcode题解(九)
2015-12-10 19:00
537 查看
28、Implement strStr()-------KMP算法(*)
题目
这道题目其实就是实现KMP算法,并且该算法也是比较经典的算法,需要很好的掌握:
贴上几个介绍字符串匹配的算法说明链接
http://www.cnblogs.com/Su-30MKK/archive/2012/09/17/2688122.html
本题实现代码:
class Solution { public: int strStr(string haystack, string needle) { if("" == needle) return 0; if("" == haystack ) return -1; return kmp(haystack,needle); } int kmp(const std::string& s, const std::string& p, const int sIndex = 0) { std::vector<int>next(p.size()); getNext(p, next);//获取next数组,保存到vector中 int i = sIndex, j = 0; while(i != s.length() && j != p.length()) { if (j == -1 || s[i] == p[j]) { ++i; ++j; } else { j = next[j]; } } return j == p.length() ? i - j: -1; } void getNext(const std::string &p, std::vector<int> &next) { next.resize(p.size()); next[0] = -1; int i = 0, j = -1; while (i != p.size() - 1) { //这里注意,i==0的时候实际上求的是next[1]的值,以此类推 if (j == -1 || p[i] == p[j]) { ++i; ++j; next[i] = j; } else { j = next[j]; } } } };
相关文章推荐
- android 手机虚拟按键 震动过程的追溯(1)
- SpringMVC 4.2 Ajax实现
- java值类型和引用类型的区别
- Swift中的AnyObject和as
- NodeJS 基本操作
- JS--for循环的性能优化
- 通过focusInEvent和eventFilter两种方法改写控件颜色(自定义控件就是这么来的)
- Html中隐藏a标签
- C基本概念
- HBase HDFS目录树
- Java文件操作(三)每次读写一行
- 第14周项目1(4) 验证平衡二叉树
- 【常用工具类】验证码倒计时帮助类的实现
- 阿里云下mysql远程访问被拒绝
- setFocus一定要写在setLayout设置的后面,否则不起作用——使用setFocusPolicy为控件设置不同的焦点策略:Tab焦点,Click焦点,Wheel焦点和没有焦点
- js中获取jsp中的参数
- 欢迎使用CSDN-markdown编辑器
- C++primer学习:随机数.
- 【腾讯云搜分享】如何通过干预搜索结果排序,实现产品运营的策略和目的
- Struct 在iOS中的集合中使用