459. Repeated Substring Pattern

题目分析

题目链接,登录 LeetCode 后可用
比较通俗的介绍 KMP 算法
这里用到的思路是 KMP 算法,时间复杂度为 O(n),空间复杂度为 O(n)。只要理解了 KMP 算法,这里给出的代码就理解了。

代码

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        // 特殊情况
        if(s == null || s.length() < 2) {
            return false;
        }
        char[] arr = s.toCharArray();
        int[] next = new int[arr.length];
        for(int i = 1; i < arr.length; i++) {
            int k = next[i - 1];
            while((arr[k] != arr[i]) && k != 0) {
                k = next[k - 1];
            }
            if(arr[k] == arr[i]) {
                next[i] = k + 1;
            }
        }
        int p = next[arr.length - 1];
        return (p > 0) && (arr.length % (arr.length - p) == 0);
    }
}

你可能感兴趣的:(459. Repeated Substring Pattern)