寻找最长公共子字串

来源:百度知道 编辑:UC知道 时间:2024/05/31 01:55:24
寻找最长弱重复字串
如果一个短字符串P(长度至少为2)在某个长字符串S 中出现了至少两次(这两次可
以重叠,也可以有间隔,但是不能完全重合),那么,P 是S 的弱
重复字串。
例如:bacdacdabaca 里面重复的子字串是acda、bac、acd、cda、ac、da 等,最长的
重复子字串则是acda。
编程寻找最长弱重复字串。

假定长字符串s已经定义并且已经赋值(我后面就直接用了)那么:

String p;//短字符串
String result=null;//最长弱重复字串

//s已经赋过值了,否则会报错
for(int i=s.length()-2;i>=2;i--){
HashSet<String> hs = new HashSet<String>();
for(ing j=0;j<=s.length()-i;j++){
int count=hs.size();
p=s.substring(j,i+j);
hs.add(p);
//存放相同的字符串对于HashSet来说size是不变的
if(hs.size()==count){
result=p;
break;
}
}
if(result!=null) break;
}