题目:
我的方案:
public class Solution {
public int strStr(String haystack, String needle) {
int hslen=haystack.length();
int nllen=needle.length();
int rlen=-1;
for(int i=0;i<hslen;i++){
int len=0;
for(int j=0;j<nllen;j++){
int templen=i+j;
if(templen>=hslen)break;
if(needle.charAt(j)!=haystack.charAt(templen)){
break;
}else{
len++;
}
}
if(len==nllen) {rlen=i;break;}
}
return rlen;
}
}
遗憾的是超时了,Time Limit Exceeded。
根据网上改进的简洁方案:
public class Solution {
public int strStr(String haystack, String needle) {
int hlen=haystack.length();
int nlen=needle.length();
if(nlen>hlen)return -1;
int i,j;
for(i=j=0;i<hlen&&j<nlen;){
if(haystack.charAt(i)==needle.charAt(j)){
i++;
j++;
}else{
i=i-j+1;
j=0;
}
}
return nlen!=j?-1:i-j;
}
}
可以通过,但是效率不是很理想。
还有更简洁的:
public class Solution {
public int strStr(String haystack, String needle) {
return haystack.indexOf(needle);
}
}
经典的KMP解决方案请参考:
KMP解决方案