T28. Implement strStr()【Easy】
題目
實(shí)現(xiàn)方法strStr()
返回字符串 needle 在字符串 haystack 中最先出現(xiàn)的 index(序號)字逗,如果 haystack 中不包含 needle,就返回 -1床绪。
思路
用 i 來遍歷 haystack 指代詞的 index ,用 needle.charAt(j) 和 haystack.charAt(i + j) 來比較來識別 needle 字符串是否在 haystack 中
具體思路看代碼還有我寫的注釋吧這里還是舉個(gè)例子比較容易讓人理解代碼的思路
舉個(gè)栗子 (? ??_??)?:
haystack="Iamverysmart" needle="very"
遍歷情況:
I传轰!=v,break,下一個(gè)
a!=v,break
...
v==v,e==e,r==r,y==y
長度達(dá)到needle.length,匹配成功唧瘾,返回 v 所對應(yīng)的i
代碼
代碼取自 Top Solution,稍作注釋
public int strStr(String haystack, String needle) {
//i是對haystack的遍歷
for (int i = 0; ; i++) {
//j是對needle的遍歷
for (int j = 0; ; j++) {
//當(dāng)j == needle.length()時(shí)代表沒有break,所以代表匹配成功,返回當(dāng)前i就是對應(yīng)的值
if (j == needle.length()) return i;
//當(dāng)i + j > haystack.length()時(shí)是不可能有匹配的档址,所以當(dāng)相等時(shí)還沒時(shí)祠斧,就代表不存在
if (i + j == haystack.length()) return -1;
//代表i~i+needle.length和needle的第j+1個(gè)字符不匹配闻察,不用再往下比了
if (needle.charAt(j) != haystack.charAt(i + j)) break;
}
}
}