You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写Java方法:检测字符串重复子串并返回其period(周期)长度或0

Java方法:判断字符串重复子串的周期长度

功能说明

实现一个Java方法,判断给定字符串是否由重复的相同子串构成,若存在则返回该子串的长度(即周期period),不存在则返回0。例如字符串"abcabcabcabcabc"的周期为3。

实现思路

  1. 快速校验重复可能性:若字符串s由重复子串构成,将s与自身拼接得到s+s,去掉首尾各一个字符后,新字符串必然包含原s。这一步能快速排除无重复子串的情况。
  2. 寻找最小周期长度:遍历可能的子串长度(范围1到s.length()/2),检查该长度是否能整除字符串总长度,且重复该子串可完全拼接出原字符串,第一个符合条件的长度即为最小周期。

代码实现

public class RepeatSubstringChecker {
    public static int findRepeatSubstringLength(String s) {
        // 边界处理:空串或长度小于2,直接返回0
        if (s == null || s.length() < 2) {
            return 0;
        }
        
        String doubledStr = s + s;
        String trimmedStr = doubledStr.substring(1, doubledStr.length() - 1);
        
        // 修剪后的拼接串不包含原串,说明无重复子串
        if (!trimmedStr.contains(s)) {
            return 0;
        }
        
        int strLength = s.length();
        // 遍历所有可能的子串长度,寻找最小周期
        for (int subLength = 1; subLength <= strLength / 2; subLength++) {
            if (strLength % subLength != 0) {
                continue;
            }
            String subStr = s.substring(0, subLength);
            boolean isRepeated = true;
            for (int i = subLength; i < strLength; i += subLength) {
                if (!subStr.equals(s.substring(i, i + subLength))) {
                    isRepeated = false;
                    break;
                }
            }
            if (isRepeated) {
                return subLength;
            }
        }
        
        return 0;
    }

    // 测试用例
    public static void main(String[] args) {
        System.out.println(findRepeatSubstringLength("abcabcabcabcabc")); // 输出3
        System.out.println(findRepeatSubstringLength("ababab")); // 输出2
        System.out.println(findRepeatSubstringLength("abcd")); // 输出0
        System.out.println(findRepeatSubstringLength("aaaaa")); // 输出1
    }
}

代码解释

  • 边界处理:直接过滤空字符串或长度小于2的字符串,这类字符串不可能存在重复子串。
  • 拼接校验:通过s+s修剪后的字符串是否包含原串,快速判断是否存在重复子串的可能,减少后续不必要的遍历。
  • 周期查找:从最小的可能子串长度开始遍历,找到第一个能完全重复构成原串的长度,保证返回的是最小周期。

内容的提问来源于stack exchange,提问作者Livio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:03:14