对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。
样例
样例 1:
输入: source = “source” , target = “target”
输出:-1
样例解释: 如果source里没有包含target的内容,返回-1
样例 2:
输入: source = “abcdabcdefg” ,target = “bcd”
输出: 1
样例解释: 如果source里包含target的内容,返回target在source里第一次出现的位置
我自己按照kmp得思路写了个算法,排在lintCode 该算法得第五名 下面是我的算法
/**
* @param source:
* @param target:
* @return: return the index
*/
public static int strStr(String source, String target) {
// Write your code here
char[] sourceArray = source.toCharArray();
char[] targetArray = target.toCharArray();
if (targetArray.length==0){
return 0;
}
if (targetArray.length>sourceArray.length){
return -1;
}
//利用kmp算法进行匹配
int i=0;
while (i<sourceArray.length){
int flag=0;
int j=0;
if (i+j<sourceArray.length){
while (sourceArray[j+i]==targetArray[j]){
flag++;
j++;
if (j==targetArray.length){
break;
}
if (i+j>=sourceArray.length){
break;
}
}
}
if (flag==targetArray.length){
return i;
}
if (flag==0){
i++;
}else {
i=i+flag-1;
if (i==0){
i++;
}
}
}
return -1;
}