如何在字符串中找到最长的连续重复子字符串?

时间:2017-01-16 04:09:33

标签: java string longest-substring

为了解密消息,我需要先找到密钥。根据给定的信息,我发现密钥是字符串的一部分:

  

str =“251220825122082”

我们可以很容易地知道密钥应该是“2512208”,因为密钥应该在加密消息时重复使用。但是,我尝试了很多方法并得到了答案“25122082”,最后又增加了2个,但它只是密钥的另一个开头。

我尝试的方法:

  1. 正则表达式:String repeated = str.replaceAll("(.+?)\\1+", "$1");
  2. LRS Java
  3. 这两个提供相同的答案(“25122082”)。

    任何人都可以帮我解决这个问题吗?

    谢谢!

1 个答案:

答案 0 :(得分:0)

感谢@ajb,使用find()和group()解决了这个问题。

    String str = "251220825122082";
    Pattern p = Pattern.compile("(.+?)\\1+");
    Matcher m = p.matcher(str);
    while (m.find()) {
        String repeated = m.group(1);
        System.out.println(repeated);
    }

输出:2512208