【发布时间】:2013-02-08 10:06:03
【问题描述】:
给定一个字符串:“blablafblafbla”和 2 个限制:x=3,y=5 我想找到长度在 x 和 y 之间的最长重复子字符串。如果有很多,第一个 在我的例子中,这将是“blaf” 几个问题: 1.使用正则表达式更容易吗? 2.我知道如何找到最长的子字符串,但是我必须在哪里设置它在 x 和 y 之间的条件?
public static String longestDuplicate(String text)
{
String longest = "";
for (int i = 0; i < text.length() - 2 * longest.length() * 2; i++)
{
OUTER: for (int j = longest.length() + 1; j * 2 < text.length() - i; j++)
{
String find = text.substring(i, i + j);
for (int k = i + j; k <= text.length() - j; k++)
{
if (text.substring(k, k + j).equals(find))
{
longest = find;
continue OUTER;
}
}
break;
}
}
return longest;
}
【问题讨论】:
-
很抱歉,您的控制语句错误。我强烈建议您在编写代码时学习更好的实践。你为什么要使用标签?那里真的需要一个“继续”语句,还是循环设计不同?
-
“坏”是什么意思?
-
@LuciC:此代码存在多个问题。几乎任何时候你必须使用定向
break或continue,你想退后一步说“嗯,也许我在这里遇到了麻烦。” 特别是,如果您发现自己编写的循环永远不会真正循环,除非内部循环向它抛出一个定向的continue,就像您的循环标记为OUTER。在循环的终端条件中进行大量计算是另一个危险信号。但这只是codereview.stackexchange.com 的全部内容,而不是SO。 :-) -
@LuciC:FWIW,该代码不起作用。它为给定的输入找到
"bla"而不是"blaf"。 pastie.org/6094127 -
你是对的......我现在已经更正了。