- 
                Notifications
    You must be signed in to change notification settings 
- Fork 12.2k
Open
Description
感觉算法竞赛版本的KMP算法更加精简,更好理解
采用字符串拼接方法,只需找到pi[i] == m的位置
附上解释链接:https://oi-wiki.org/string/kmp/
class Solution {
    public int strStr(String haystack, String needle) {
        int n = haystack.length();
        int m = needle.length();
        String s = needle + "#" + haystack;
        int[] pi = new int[s.length()];
        for (int i = 1; i < s.length(); i++) {
            int len = pi[i - 1];
            while (len > 0 && s.charAt(i) != s.charAt(len)) {
                len = pi[len - 1];
            }
            if (s.charAt(i) == s.charAt(len)) {
                pi[i] = len + 1;
                if (pi[i] == m) {
                    return i - m * 2;
                }
            }
        }
        return -1;
    }
}Metadata
Metadata
Assignees
Labels
No labels