java查找字符串长度_java – 查找长度介于x和y之间的最长重复子字符串

给定一个字符串:“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;

}

解决方法:

您提供的代码是一种解决问题的极其低效的方法.我将使用Rabin-Karp或其他一些滚动哈希算法实现解决方案,这将使您能够解决复杂度为O((y-x)* L)的问题.

你不能在这里使用正则表达式 – 它们旨在解决完全不同的任务.

至于如何使用解决方案查找长度介于x和y之间的最长子串的问题,只需修改j上的循环,只考虑区间[x,y]中的值.这是你如何做到这一点.

for (int j = Math.max(longest.length() + 1, x) ; j * 2 < text.length() - i && j < y; j++)

编辑:找到最长的子串,反转for循环:

for (int j = Math.min((text.length() - i -1)/2, y) ; j > longest.length() && j >=x; j--)

标签:java,algorithm,string

来源: https://codeday.me/bug/20190625/1286028.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值