Как найти самую длинную последовательную повторяющуюся подстроку в строке?

Для того, чтобы расшифровать сообщение, мне нужно сначала найти ключ. Из приведенной информации я узнаю, что ключ является частью строки:

str = » 251220825122082″

Мы можем легко получить, что ключ должен быть » 2512208«, так как ключ должен неоднократно использоваться в шифровании сообщения. Тем не менее, я попробовал много методов и получил ответ»25122082«, который добавляет еще 2 в конце, но это просто еще одно начало ключа.

Метод, который я пробовал:

  1. регулярное выражение: String repeated = str.replaceAll("(.+?)1+", "

    In order to de-crypt a message, I need to first find the key. From the given information, I find the key is part of the string:

    str = "251220825122082"

    We can easily get that the key should be "2512208" since the key is supposed to be repeatedly used in encrypting a message. However, I tried many methods and got the answer "25122082", which adds another 2 in the end, but it's just another beginning of the key.

    The method I have tried:

    1. regex: String repeated = str.replaceAll("(.+?)\1+", "$1");
    2. LRS Java

    These two provide the same answer("25122082").

    Can anyone help me with this problem?

    Thank you!

    ");

  2. LRS Java

Эти два дают один и тот же ответ(» 25122082«).

Может ли кто-нибудь помочь мне с этой проблемой?

Спасибо!

1 ответ

  1. Благодаря @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