假设我们有一系列字符串。
asList("abcdxyz", "abcdyz", "abcdm", "abcdn", "abcdo");
我们如何才能使用String类方法找到最常见的部分“abcd”?
答案 0 :(得分:3)
这被称为longest common substring problem,并且已成为一些研究的主题(另见longest common subsequence problem)。您应该阅读有关该问题的信息,然后实施适当的算法。
实现完整算法是我没有时间的事情,但我发现this blog post有一个实现。
答案 1 :(得分:1)
您可能正在寻找Longest Common Substring问题(对于n个字符串)。
您可以使用此代码作为开始,但代码可能会抓取大值的' n'。在这种情况下,您应该更好地使用动态编程[请参阅相关部分here]。
public static String identifyCommonSubStrOfNStr(String [] strArr){
String commonStr="";
String smallStr ="";
//identify smallest String
for (String s :strArr) {
if(smallStr.length()< s.length()){
smallStr=s;
}
}
String tempCom="";
char [] smallStrChars=smallStr.toCharArray();
for (char c: smallStrChars){
tempCom+= c;
for (String s :strArr){
if(! s.contains(tempCom)){
tempCom="";
break;
}
}
if(tempCom!="" && tempCom.length()>commonStr.length()){
commonStr=tempCom;
}
}
return commonStr;
}
注意:最长公共子串问题与最长公共Subsequence问题不同,因为与子串不同,子序列不需要占用原始序列中的连续位置。
希望它有所帮助!
答案 2 :(得分:0)
对于这种特定情况,你可以开始比较子串,增加每次传递中子串的长度