字符串----找到最大相同子串(仅有一个最大相同子串的情况)

题目:
给定两个字符串,找出两个字符串的最大相同子串
注:substring(beginIndex,endIndex):子串的结束位置是开区间,也就是不包含这个位置的字符!!!

比如:str1 = “abcwerthelloyuiodefabcdef”;str2 = “cvhellobnm”
提示:将短的那个串进行长度依次递减的子串与较长的串比较。

思路:
将最小子串依次递减和最长的串进行比较,每次递减1位,然后对递减1位后的字符串进行左右移动对比;如果没有相同子串则继续往下递减1位。难点在于,如何左右移动比较。

    public String getMaxSameString(String str1,String str2){
        if(str1 == null ||  str2 == null) return new String("抱歉!没有相同子串");
        String maxStr = (str1.length()>str2.length())?str1:str2;
        String minStr = (str1.length()>str2.length())?str2:str1;
        int length = minStr.length();

        for(int i= 0;i<length;i++){
            for(int x= 0, y=length-i;y<=length;x++,y++){
                String subStr = minStr.substring(x,y);
                if(maxStr.contains(subStr)){
                    return subStr;
                }
            }
        }
        return null;
    }

测试:

    public static void main(String[] args) {
        String str1 = "abcwerthelloyuiodefabcdef";
        String str2 = "cvhellobnm";
        Test test = new Test();
        String maxSameString = test.getMaxSameString(str1, str2);
        System.out.println("最大相同子字符串为:"+maxSameString);
    }

输出结果:

最大相同子字符串为:hello

类似的题目还有比如最大相同子串不止一个时,找出相同子串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值