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);
            }
        }
    }
}

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值