`

Java 求最大公共子串

    博客分类:
  • JAVA
阅读更多

在网上看了一些求两个字符串的最大公共子串的例子,因为多是用了一些算法的思想,自己看的不太懂,就自己试着写了一个,结果还是有些惊喜的,虽然应该不是最简单和高效的,但应该是代码比较少的了吧,呵呵~小骄傲一下。

 

public class CompareStrM
{
    public static void main(String[] args)
    {
        String str1 = "今天,听到一首歌是这么唱的:“明月几时有,把酒问青天”。。。。";
        String str2 = "苏轼的“明月几时有,把酒问青天”是千古名句";
        
        String minStr = str1.length() >= str2.length() ? str2 : str1;
        String maxStr = str1.length() <= str2.length() ? str2 : str1;
        
        ArrayList<String> lList = new ArrayList<String>();
        int maxLength = 1;
        
        for (int i = 0; i < minStr.length() - maxLength * 2; i++) {
            String subStr = minStr.substring(i, i + maxLength);
            
            if (maxStr.contains(subStr)) {
                String str = null;
                int len = maxLength;
                do {
                    len++;
                    str = minStr.substring(i, i + len);
                } while (maxStr.contains(str));
                
                if (len-- >= maxLength) {
                    lList.add(str.substring(0, str.length() - 1));
                    maxLength = len;
                }
            }
        }
        
        System.out.println("MaxLength: " + maxLength + "\n");
        
        for (String s : lList) {
            if (s.length() == maxLength) {
                System.out.print("最大相同子串是: " + s);
            }
        }
    }
}

 

之后,也会继续整理一些找到的资料贴到下面。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics