以下是C++代码实现KMP算法的解法:

class Solution {
public:
    bool repeatedSubstringPattern(string s) {
        int n = s.size();
        vector<int> next(n + 1, 0);
        for (int i = 1, j = 0; i < n; i++) {
            while (j > 0 && s[i] != s[j]) {
                j = next[j];
            }
            if (s[i] == s[j]) {
                j++;
            }
            next[i + 1] = j;
        }
        return next[n] && next[n] % (n - next[n]) == 0;
    }
};

首先,我们使用KMP算法计算字符串的next数组。然后,我们检查next[n]是否为非零,并且(n - next[n])是否能够整除n。如果是,则说明字符串可以通过由它的一个子串重复多次构成。

请使用C++语言的KMP算法帮我解答这道题:给定一个非空的字符串 s 检查是否可以通过由它的一个子串重复多次构成。

原文地址: http://www.cveoy.top/t/topic/bnjI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录