28. Implement strStr()(KMP)
来源:互联网 发布:怎么在淘宝凑单买东西 编辑:程序博客网 时间:2024/05/10 03:32
1刷
KMP经典算法,主要是了解KMP基本原理, next数组怎样求!
class Solution {public: int next[500001]; void makenext(string s){ int n = s.size(); next[0] = 0; int k = 0; for(int i = 1; i < n; ++ i){ while(k > 0 && s[k] != s[i]) k = next[k - 1]; if(s[k] == s[i]) k++; next[i] = k; } } int strStr(string haystack, string needle) { int n = haystack.size(); int m = needle.size(); if(m == 0) return 0; int num = -1; makenext(needle); for(int i = 0, j = 0; i < n; ++ i){ while(j > 0 && haystack[i] != needle[j]) j = next[j - 1]; if(haystack[i] == needle[j]) j++; if(j == m){ num = i - m + 1; break; } } return num; }};
2刷
没啥好说的,就是kmp,要记住next数组是怎样求的,其实next的求法跟kmp匹配时候基本大同小异,就是容易忘记,背住那两幅next的图就ok比较好理解。
注意小细节ps
int n = needle.length();
if(n == 0) return 0
注意这个就ok,可以3刷
class Solution {public: vector<int>next; void makenext(string s){ int n = s.length(); for(int i = 0; i < n; ++ i) next.push_back(0); for(int i = 0, j = 1; j < n; ++ j){ while(i > 0 && s[i] != s[j]) i = next[i - 1]; if(s[i] == s[j]) i++; next[j] = i; } } int index = -1; int strStr(string haystack, string needle) { int m = haystack.length(); int n = needle.length(); if(n == 0) return 0; makenext(needle); for(int i = 0, j = 0; i < m; ++ i){ while(j > 0 && haystack[i] != needle[j]) j = next[j - 1]; if(haystack[i] == needle[j]) j++; if(j == n){ index = i - n + 1; break; } } return index; }};
0 0
- 28. Implement strStr()(KMP)
- 28. Implement strStr()(KMP算法)
- Leetcode 28. Implement strStr() KMP算法解题
- leetcode 28. Implement strStr() KMP 算法
- LeetCode Implement strStr() --- KMP
- Implement strStr() [LeetCode] + KMP
- KMP 算法 && Implement strStr()
- Implement strStr() && kmp算法
- Implement strStr() KMP算法
- kmp-----leetcode(Implement strStr() )
- 【KMP&字符串匹配】Implement strStr()
- LeetCode 28. Implement strStr暴力搜索和KMP算法
- 28. Implement strStr() 以及KMP算法的实现
- 【leetcode】28. Implement strStr()(Python & C++)(KMP算法)
- [LeetCode]28.Implement strStr()
- LeetCode --- 28. Implement strStr()
- LeetCode 28.Implement strStr()
- [Leetcode] 28. Implement strStr()
- 【问题收录】INSTALL_FAILED_NO_MATCHING_ABIS
- 25. Reverse Nodes in k-Group
- 26. Remove Duplicates from Sorted Array
- Mac基于docker的hadoop单机环境搭建
- 27. Remove Element
- 28. Implement strStr()(KMP)
- 29. Divide Two Integers
- js基本树形插件实现
- 30. Substring with Concatenation of All Words
- 31. Next Permutation
- Rust 变量与函数
- dhcp服务器搭建(一)概述
- [leetCode刷题笔记]2017.01.30
- dhcp服务器搭建(二)详解