如何找到字符串中最常见的部分?

时间:2015-02-04 12:22:16

标签: java string core

假设我们有一系列字符串。

asList("abcdxyz", "abcdyz", "abcdm", "abcdn", "abcdo");

我们如何才能使用String类方法找到最常见的部分“abcd”?

3 个答案:

答案 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)

对于这种特定情况,你可以开始比较子串,增加每次传递中子串的长度