Implement strStr()
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
Update (2014-11-02):
The signature of the function had been updated to return the index instead of the pointer. If you still see your function signature returns a char
 * or String, please click the reload button  to
 reset your code definition.
算法:KMP算法,字符串比对
java:
public class Solution {
    public int strStr(String haystack, String needle) {
        int l1=haystack.length();
        int l2 = needle.length();
        if(l1<l2){
            return -1;
        }
        if(l1==l2){
            if(haystack.equals(needle)){
                return 0;
            }
            return -1;
        }
        if(l2==0){
            return 0;
        }
        int i=0;
        int j=0;
        int[] next = new int[l2+1];
        getNext(needle,next);
        while(i<l1&&j<l2){
            if(j==-1||haystack.charAt(i)==needle.charAt(j)){
                i++;
                j++;
            }else{
                j = next[j];
            }
            if(j==l2){
                return i-l2;
            }
        }
        return -1;
    }
    
    public void getNext(String s, int[] next){
        int i,j;
        int len = s.length();
        i=0;
        j=-1;
        next[0]=-1;
        while(i<len-1){
            if(j==-1||s.charAt(i)==s.charAt(j)){
                i++;
                j++;
                next[i]=j;
            }else{
                j=next[j];
            }
        }
    }
}
 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号