实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
当 needle
是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle
是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
python:
class Solution:
def strStr(self, haystack, needle):
"""
:type haystack: str
:type needle: str
:rtype: int
"""
p,q = len(haystack),len(needle)
if q == 0:
return 0
n = p - q
if n < 0 or (n == 0 and haystack[0] != needle[0]):
return -1
i,j = 0,0
while i < p:
if haystack[i] == needle[j]:
if j == (q - 1):
return i - j
else:
i += 1
j += 1
else:
i = i - j + 1
j = 0
return -1
C++:
class Solution {
public:
int strStr(string haystack, string needle) {
int p = haystack.length();int q = needle.length();int n = p - q;
if(q == 0) return 0;
if(n < 0 || (n == 0 && haystack[0] != needle[0])) return -1;
int i = 0;int j = 0;
while(i < p){
if(haystack[i] == needle[j]){
if(j == (q - 1)) return i - j;
else{
i += 1;j += 1;
}
}
else{
i = i - j + 1;j = 0;
}
}
return -1;
}
};