28.Implement strStr() leetcode java
阿新 • • 發佈:2019-01-01
題目:
Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Example 1:
Input: haystack = "hello", needle = "ll" Output: 2
Example 2:
Input: haystack = "aaaaa", needle = "bba" Output: -1
在haystack找到子串needle,返回needle的第一個字元在haystack中的index,找不到則返回-1.
用i指向haystack,用j指向needle,比較i和j指向的字元:
①相等:如果j=needle.length,那麼表示到這裡needle已經遍歷完,返回相應的位置,否則表示needle還沒遍歷完,那麼i++,j++
②不相等:這個串到這裡匹配失敗,需要改變i和j的位置重新尋找,i需要指向haystack中剛剛被匹配的那個串的第二個字元i=i-j+1,j則需要指向needle的頭,即j=0
時間複雜度為O(n)
public class Solution { public int strStr(String haystack, String needle) { if(needle.length()==0) return 0; char[] c1=haystack.toCharArray(); char[] c2=needle.toCharArray(); int i=0,j=0; while(i<c1.length&&j<c2.length){ if(c1[i]==c2[j]){ if(j==c2.length-1) return i-c2.length+1; else{ i++; j++; } } else{ i=i-j+1; j=0; } } return -1; } }