原题链接:Implement strStr()
题目内容:
Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Example 1:
Input: haystack = “hello”, needle = “ll”
Output: 2
Example 2:
Input: haystack = “aaaaa”, needle = “bba”
Output: -1
C++
class Solution {
public:
int strStr(string haystack, string needle) {
if (needle.empty()) return 0;
int m = haystack.size(), n = needle.size();
if (m < n) return -1;
for (int i = 0; i <= m - n; ++i) {
int j = 0;
for (j = 0; j < n; ++j) {
if (haystack[i + j] != needle[j]) break;
}
if (j == n) return i;
}
return -1;
}
};
Python
class Solution(object):
def strStr(self, haystack, needle):
"""
:type haystack: str
:type needle: str
:rtype: int
"""
if not needle:
return 0
if len(haystack) < len(needle):
return -1
next = self.getNext(needle)
i = 0
j = 0
while (i < len(haystack) and j < len(needle)):
if j == -1 or haystack[i] == needle[j]:
i += 1
j += 1
else:
j = next[j];
if j == len(needle):
return i - j
else:
return -1
def getNext(self, comp_str):
k = -1
j = 0
next = [0 for i in range(0, len(comp_str))]
next[0] = -1
while(j < len(comp_str)-1):
if k == -1 or comp_str[j] == comp_str[k]:
k += 1
j += 1
if comp_str[j] != comp_str[k]:
next[j] = k
else:
next[j] = next[k]
else:
k = next[k]
return next
暴力解法不可取,应该考虑使用kmp算法。kmp详细讲解参考从头到尾彻底理解KMP,里面讲解的非常详细,还有另外一种BM算法也可以了解一下,效率更高。