LeetCode刷题笔记三
2017-02-23 10:47
99 查看
28. Implement strStr()
Description:
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
算法:KMP算法
参考资料:http://blog.csdn.net/yutianzuijin/article/details/11954939/
代码:
class Solution {
public:
int strStr(string haystack, string needle)
{
int len1=haystack.size(), len2=needle.size();
if(len1 < len2)
{
return -1;
}
if(len1==0 && len2==0)
{
return 0;
}
if(len2==0)
{
return 0;
}
int i, j;
int *next = new int[len2+1]; //next[i]表示needle前i个元素中前缀和后缀的最大公共长度
next[0] = 0;
next[1] = 0;
for(i=1; i<len2; ++i)
{
j = next[i];
while(j>0 && needle[i] != needle[j])
{
j=next[j];
}
if(needle[i] == needle[j])
{
++j;
}
next[i+1] = j;
}
for(i=0, j=0; i<len1; ++i)
{
while(j>0 && haystack[i] != needle[j])
{
j = next[j];
}
if(haystack[i] == needle[j])
{
j += 1;
}
if(j == len2)
{
delete [] next;
return i-j+1;
}
}
// for(i=0, j=0; i<=len1-len2;)
// {
// while(j<len2 && haystack[i+j] == needle[j])
// {
// ++j;
// }
// if(j == len2)
// {
// delete [] next;
// return i;
// }
// else
// {
// i += j-next[j];
// j = 0;
// }
// }
delete [] next;
return -1;
}
};
Description:
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
算法:KMP算法
参考资料:http://blog.csdn.net/yutianzuijin/article/details/11954939/
代码:
class Solution {
public:
int strStr(string haystack, string needle)
{
int len1=haystack.size(), len2=needle.size();
if(len1 < len2)
{
return -1;
}
if(len1==0 && len2==0)
{
return 0;
}
if(len2==0)
{
return 0;
}
int i, j;
int *next = new int[len2+1]; //next[i]表示needle前i个元素中前缀和后缀的最大公共长度
next[0] = 0;
next[1] = 0;
for(i=1; i<len2; ++i)
{
j = next[i];
while(j>0 && needle[i] != needle[j])
{
j=next[j];
}
if(needle[i] == needle[j])
{
++j;
}
next[i+1] = j;
}
for(i=0, j=0; i<len1; ++i)
{
while(j>0 && haystack[i] != needle[j])
{
j = next[j];
}
if(haystack[i] == needle[j])
{
j += 1;
}
if(j == len2)
{
delete [] next;
return i-j+1;
}
}
// for(i=0, j=0; i<=len1-len2;)
// {
// while(j<len2 && haystack[i+j] == needle[j])
// {
// ++j;
// }
// if(j == len2)
// {
// delete [] next;
// return i;
// }
// else
// {
// i += j-next[j];
// j = 0;
// }
// }
delete [] next;
return -1;
}
};
相关文章推荐
- LeetCode 笔记系列三 3Sum
- LeetCode题目笔记(一) -- Minimum Depth Of Binary Tree
- LeetCode 笔记系列13 Jump Game II [去掉不必要的计算]
- LeetCode 笔记系列 19 Scramble String [合理使用递归]
- 【LeetCode】Triangle做题笔记
- LeetCode 笔记系列 20 Interleaving String [动态规划的抽象]
- LeetCode 笔记系列 14 N-Queen II [思考的深度问题]
- LeetCode 笔记系列16.3 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]
- LeetCode 笔记系列 18 Maximal Rectangle [学以致用]
- LeetCode题目笔记(二) -- Maximum Depth of Binary Tree
- LeetCode 笔记系列六 Reverse Nodes in k-Group [学习如何逆转一个单链表]
- LeetCode 笔记系列十 Suduko
- LeetCode 笔记系列12 Trapping Rain Water [复杂的代码是错误的代码]
- LeetCode 笔记系列七 Substring with Concatenation of All Words
- LeetCode题目笔记(三) -- Median of Two Sorted Arrays
- LeetCode 笔记系列一 Median of Two Sorted Arrays
- LeetCode 笔记系列五 Generate Parentheses
- LeetCode 笔记系列15 Set Matrix Zeroes [稍微有一点hack]
- 【LeetCode】Reverse Integer解题笔记
- 【LeetCode】Valid Sudoku解题笔记