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