你不造就未来,就不能控制发生在你身上的事。

题目描述:

找出字符串中第一个匹配项的下标

给你两个字符串 haystackneedle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1

解题代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
int strStr(string haystack, string needle) {
if(needle.size() == 0) return 0;
if(haystack.size() == 0) return -1;
int i = 0, j = 0;
for(i = 0; i < haystack.size(); i++){
if(haystack[i] == needle[j]){
if(j == needle.size() - 1) return i - j;
j++;
}else{
i = i - j;
j = 0;
}
}
return -1;
}
};

解读与收获:

此题用的暴力匹配,还有更好的kmp算法,今晚懒不想写了,之后有空再说,暴力匹配即目标串和匹配串分别有一个下标指针,如果遇到匹配的字符,目标串和匹配串的下标一起移动,若匹配串下标等于匹配串长度减1,说明找到匹配段了,返回目标串下标减匹配串下标,就能得到第一个匹配项下标;如果在此过程中出现一个不匹配的字符,那目标串的下标要移动到开始第一个匹配字符的下一个,然后匹配串下标归零重新进行匹配,这也是该做法“暴力”所在,时间复杂度较高。