Problem
For a given source string and a target string, you should output the first index(from 0) of target string in source string.
If target does not exist in source, just return -1.
Note
我终于找到了比较好的KMP算法。
http://alice-alicesspace.blogspot.com/2015/07/strstr-kmp-solution-java.html
Solution
class Solution {
public int strStr(String source, String target) {
//write your code here
if (source == null | target == null) {
return -1;
}
int i, j;
for (i = 0; i < source.length() - target.length() +1; i++) {
for (j = 0; j < target.length(); j++) {
if (source.charAt(i+j) != target.charAt(j)) {
break;
}
}
if (j == target.length()) {
return i;
}
}
return -1;
}
}
KMP算法不如也贴出来。
class Solution {
public int strStr(String source, String target) {
//write your code here
if (source == null || target == null) {
return -1;
}
if (target.length() == 0) {
return 0;
}
int[] prefix = new int[target.length()];
int k = 0;
for (int i = 1; i < target.length(); i++) {
while (k > 1 && target.charAt(k) != target.charAt(i)) {
k = prefix[k-1];
}
if (target.charAt(i) == target.charAt(k)) k++;
prefix[i] = k;
}
k = 0;
for (int i = 0; i < source.length(); i++) {
while (k > 1 && source.charAt(i) != target.charAt(k)) {
k = prefix[k-1];
}
if (target.charAt(k) == source.charAt(i)) {
k++;
}
if (k == target.length()) {
return i - k + 1;
}
}
return -1;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。