1. 程式人生 > >LeetCode--28. Implement strStr()

LeetCode--28. Implement strStr()

        這個是個easy的題目,首先想到直接用String.indexOf()方法直接求,但覺得很恥辱!!!於是有了如下思路:遍歷整個文字串(長度為m),比對文字串字母與目標串(長度為n)首字母是否相同,如果相同就檢查模式串後面的字母是否相同,但是越簡單的題目越容易有小bug,尤其這裡面兩個迴圈裡的的break處理的有點大意了。這個思路非常普通,時間複雜度O(mn)。KMP演算法應該是最優的結果。

class Solution {
    public int strStr(String haystack, String needle) {
        
        if(needle.length()==0)
            return 0;
        int patlen=needle.length();
        int txtlen=haystack.length();
        if(patlen>txtlen)
            return -1;
        
        for(int i=0;i<haystack.length();i++)
        {
            if(haystack.charAt(i)==needle.charAt(0))
            {
                if(i+patlen-1>=txtlen)
                    return -1;
                int j=1;
                for(;j<patlen;j++)
                {
                    if(haystack.charAt(i+j)!=needle.charAt(j))
                        break;
                }
                if(j==patlen)
                    return i;
            }
        }
        return -1;   
    }
}