【发布时间】:2017-05-30 20:57:23
【问题描述】:
为了解密消息,我需要先找到密钥。从给定的信息中,我发现键是字符串的一部分:
str = "251220825122082"
我们可以很容易地得到密钥应该是“2512208”,因为密钥应该被重复用于加密消息。但是,我尝试了很多方法,得到了答案“25122082”,最后又加了一个2,但这只是key的另一个开头。
我试过的方法:
- 正则表达式:
String repeated = str.replaceAll("(.+?)\\1+", "$1"); - LRS Java
这两个提供相同的答案(“25122082”)。
谁能帮我解决这个问题?
谢谢!
【问题讨论】:
-
replaceAll正在做它应该做的事情:它将 25122082512208 替换为 2512208。字符串末尾仍然有一个“2”,它不会替换它。在这里,由于您试图从字符串中提取信息,replaceAll是不适合这项工作的工具。使用find搜索正则表达式,使用group提取捕获组。replaceAll用于将输入字符串的一部分替换为其他字符串,并单独保留输入字符串的其余部分。这不是你在这里想要做的。 -
你怎么确定 2512208 是关键而不是 25122082?
-
@TimBiegeleisen 不重复,使用该方法我无法得到正确答案。即使使用这个在线演示,我也无法得到正确的答案。 daniel-hug.github.io/longest-repeated-substring
-
@NickZiebert 因为密钥重复。如果 25122082 是关键,那么重复的模式是什么?如果密钥不够长来加密消息,它应该从头开始循环。
标签: java string longest-substring