自己解法
这个题因为是简单题,就直接逐个获取对应长度的字符串,然后跟对应的字符串进行对比。
class Solution {
public int strStr(String haystack, String needle) {
if (needle == "") {
return 0;
}
int nLen = needle.length();
int hLen = haystack.length();
for (int i = 0; i <= hLen - nLen; i++) {
String temp = haystack.substring(i, i + nLen);
if (needle.equals(temp)) {
return i;
}
}
return -1;
}
}
官方解法
官方有个双指针的解法,分别指向haystack和needle,只有当两者的第一个字母相同时,两者才进行比较,不然haystack一直后移,两者完全一致的情况下,返回对应下标,不一致的情况下,pn回溯为pn - currLen + 1,接着进行上述过程。
class Solution {
public int strStr(String haystack, String needle) {
int L = needle.length(), n = haystack.length();
if (L == 0) return 0;
int pn = 0;
while (pn < n - L + 1) {
// find the position of the first needle character
// in the haystack string
while (pn < n - L + 1 && haystack.charAt(pn) != needle.charAt(0)) ++pn;
// compute the max match string
int currLen = 0, pL = 0;
while (pL < L && pn < n && haystack.charAt(pn) == needle.charAt(pL)) {
++pn;
++pL;
++currLen;
}
// if the whole needle string is found,
// return its start position
if (currLen == L) return pn - L;
// otherwise, backtrack
pn = pn - currLen + 1;
}
return -1;
}
}
网友评论