Leetcode#28: 求子串第一次出现在母串时的位置索引
题目描述:已知母串haystack和子串needle,若查找成功,返回子串第一次出现在母串中时,母串的位置索引;否则返回-1
- 思 路:首先判断子串是否为空,若为空,则位置索引为0;再判断子串的长度是否大于母串,若大于,则返回-1;从母串的第一个字母开始遍历,直到(母串长度-子串长度)的位置为止,当遇到与needle首字符相同的位置时,检查haystack从该位置开始的与needle长度相同的块,与needle是否相同。
C++实现如下:
class Solution
{
public:
int strStr(string haystack, string needle)
{
//判断子串是否为空,若为空,返回0
if(needle.empty())
{
return 0;
}
int len1 = haystack.size();
int len2 = needle.size();
if(len1 < len2)
{
return -1;
}
//遍历
for(int i = 0; i <= len1 - len2; ++i)
{
int j = 0;
for(j = 0; j < len2; ++j)
{
if(haystack[i + j] != needle[j])
break;
}
if(j == len2)
{
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
for i in range(len(haystack) - len(needle)+1):
if haystack[i] == needle[0]:
j = 1
while j < len(needle) and haystack[i+j] == needle[j]:
j = j + 1
if j == len(needle):
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
for i in range(len(haystack) - len(needle) + 1):
if haystack[i:i + len(needle)] == needle:
return i
return -1