strStr (easy)
判断源string中是否含有目标string。
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 is not exist in source, just return -1.
Example
If source="source" and target="target", return -1.
If source="abcdabcdefg" and target="bcd", return 1.
public int strStr(String source, String target) {
if (source == null || target == null) {
return -1;
}
if (target.length() == 0) {
return 0;
}
if (target.length() > source.length()) {
return -1;
}
int sIndex = 0;
int tIndex = 0;
while (sIndex < source.length()) {
if (source.charAt(sIndex) == target.charAt(tIndex)) {
sIndex++;
tIndex++;
} else {
sIndex++;
tIndex = 0;
}
if (tIndex == target.length()) {
return sIndex - target.length();
}
}
return -1;
}
思路
边界条件:
1. 源string和目标string中有null
2. 目标string长度为0
3. 目标string长度大于源string(包含源string为空的情况了,此处有优化,当目标长度大于源长度时,源string一定不会含有目标string)
正常情况:
目标string和源string各有一个指针。依次比较源string与目标string。当目标指针指到目标string末尾后,则比较完成。
类似双指针。sIndex表示source的当前位置,tIndex表示target的当前位置。如果两者的字符一样,则继续比较下一个位置。如果不一样,则tIndex置零,从头开始。当target全部比较完,则说明命中。