459. 重复的子字符串(Java)

题目描述:

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

输入:

s = “abcabcabcabc”

输出:

true
解释: 可由子串 “abc” 重复四次构成。 (或子串 “abcabc” 重复两次构成。)

代码实现:

public class Main{
    public static void main(String[] args) {
        String s = "abcabcabcabc";
        System.out.println(repeatedSubstringPattern(s));//true
    }

    /**
     * 从0索引开始枚举 存在的重复字符串(模式串) 暴力
     *
     * @param s 主串
     * @return 是否存在要求的模式串
     */
    public static boolean repeatedSubstringPattern(String s) {
        //字符串长度
        int len = s.length();
        int flag = 1;
        //重复字符串的长度应该大于等于1,小于等于2/len
        for (int i = 1; i <= len / 2; i++) {
            //只有能切割成自然数个重复字符串时,才进行判断
            //这里假定i就是重复字符串的长度
            if (len % i == 0) {
                flag = 1;
                for (int j = i; j < len; j++) {
                    if (s.charAt(j) != s.charAt(j - i)) {
                        //j:指向当前主串的指针  i:假定的模式串长度
                        flag = 0;//如果出现一次匹配不成功的情况,则令标记变量为0,跳出本次循环
                        break;
                    }
                }
                if (flag == 1) {
                    //经过上述循环之后,判断是否存在重复的模式串
                    return true;
                }
            }
        }
        //不存在,返回假
        return false;
    }
}

你可能感兴趣的:(力扣刷题,java,算法,开发语言)