1. 程式人生 > >28.Implement strStr() leetcode java

28.Implement strStr() leetcode java

題目:

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;
    }
}