Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
题目就是 字符串匹配。
我觉得这个题目主要是学习回顾了一下经典的KMP算法吧,这个算法感觉一段时间不看,就又忘了。。
</pre><pre name="code" class="cpp">void getNext(char *strSub,int *next)
{
if(!strSub||!next)return;
int len = strlen(strSub);
int i = 0,j=-1;
next[0] = -1;
while(i<(len -1)) {
if(j==-1||strSub[i]==strSub[j]) {
i++;j++;
next[i] = j;
} else {
j = next[j];
}
}
}
int strStr(char* haystack, char* needle)
{
if(!haystack||!needle) return -1;
int len1 = strlen(haystack);
int len2 = strlen(needle);
if(len1<len2)return -1;
if(len1==0||len2==0)return 0;
int *strSubnext = (int *)malloc(sizeof(int)*(len2));
int i = 0,j=0;
getNext(needle,strSubnext);
while(i<len1&&j<len2) {
if(j==-1||haystack[i]==needle[j]) {
++i;++j;
} else {
j = strSubnext[j];
}
if(j==len2) {
free(strSubnext);
return (i-len2);
}
}
return -1;
}
然后看到人家写的超短的JAVA代码,简直懵逼了。。
public class Solution {
public int strStr(String haystack, String needle) {
return haystack.indexOf(needle);
}
}
时间还这么快!