LeetCode 28. 实现strStr()
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
输入: haystack = “hello”, needle = “ll”
输出: 2
示例 2:
输入: haystack = “aaaaa”, needle = “bba”
输出: -1
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
暴力破解,对haystack字符串的每个字符与needle字符串的字符比较
class Solution {
public:
int strStr(string haystack, string needle) {
if(needle.length()==0)return 0;
if(needle.length()>haystack.length())return -1;
for(int i=0;i<haystack.length()-needle.length()+1;i++)
{
int count=0;
int index=i;
for(int j=0;j<needle.length();j++)
{
if(haystack[index]==needle[j])
{
index++;
count++;
}
else
{
count=-1;
break;
}
}
if(count!=-1)return i;
}
return -1;
}
};
时间复杂度O(n*m)
1.没有对needle字符串长度大于haystack字符串长度进行判断,导致内存溢出。
2.
for(int j=0;j<needle.length();j++)
{
if(haystack[i]==needle[j])
{
i++;
count++;
}
else
{
count=-1;
break;
}
}
if(count!=-1)return i-count;
else i-=count;
出现的错误有:当haystack[i]==needle[j]
时,只移动needle字符串的指针j,而haystack字符串的指针i没有移动。
因为直接使用haystack的i,在haystack[i]!=needle[j] count=-1;
导致else i-=count
中count=-1
;
3.for(int i=0;i<haystack.length()-needle.length();i++)
导致对haystack字符串少了一位的扫描。当needle.length()==haystack.length()
时,没有遍历直接返回-1;