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
Clarification:
What should we return when needle
is an empty string? This is a great question to ask during an interview.
For the purpose of this problem, we will return 0 when needle
is an empty string. This is consistent to C's strstr() and Java's indexOf().
题目大意:
给定两个字符串haystack
和needle
,找出needle
在haystack
中首次出现的位置。如果没找到则返回-1,并且当needle
是空串的时候返回0。
解题思路:
简单呐~~~~~~~~~~~~~~~~直接haystack.find(needle)(手动滑稽
也确实是简单,要查找肯定需要一次遍历,没什么好说的。
从头开始遍历,每次遍历取临时遍历temp与当前遍历下标相同,若遍历needle.size()次后完全匹配则直接返回当前的遍历下标即可
解题代码:
class Solution {
public:
int strStr(string haystack, string needle) {
//空串返回0
if (needle.empty())
return 0;
//needle长度比haystack大时返回-1
if (needle.size() > haystack.size())
return -1;
size_t haySize = haystack.size(), needSize = needle.size();
int res = -1, temp;
//循环不变量是剩余未遍历字符长度与needle长度之和小于或等于haystack长度
for (size_t hayIndex = 0, needIndex = 0; hayIndex + needSize <= haySize; ++hayIndex, needIndex = 0)
{
temp = hayIndex;
//注意needIndex得小于needSize,不然会越界
while (needIndex < needSize && haystack[temp] == needle[needIndex]) {
++temp;
++needIndex;
}
if (needIndex == needSize)
{
res = hayIndex;
break;
}
}
return res;
}
};
网友评论