java_基础知识_字符串练习题_计算两个字符串的最长公共字串长度

package tek;

  Java算法——求出两个字符串的最长公共字符串

/**   
 * @Title: 问题:有两个字符串str1和str2,求出两个字符串中最长公共字符串。
 * @author 匹夫(在YW的数据基础上再次延伸)  
 * @date 2017年4月19日 下午8:08:37 
 */
public class Demo1 {
    
    /*
    //减0 个字符  内循环1次
    k2.substring(0, 7);//外循环第1次_内循环第1次
    //减一个字符  内循环2次
    k2.substring(0, 6);//外循环第2次_内循环第1次
    k2.substring(1, 7);//外循环第2次_内循环第2次
    //减两个字符 内循环3次
    k2.substring(0, 5);// 外循环第3次_内循环第1次
    k2.substring(1, 6);// 外循环第3次_内循环第2次
    k2.substring(2, 7);// 外循环第3次_内循环第2次
    //减3个字符  内循环4次
    k2.substring(0, 4);// 外循环第4次_内循环第1次
    k2.substring(1, 5);// 外循环第4次_内循环第2次
    k2.substring(2, 6);// 外循环第4次_内循环第3次    
    k2.substring(3, 7);// 外循环第4次_内循环第4次
*/    
    public static void main(String [] args){
        String k1 = "10101121018";
        String k2 = "101210182";
        String max = null;
        String max_str = null;
        String min_str = null;
        if(k1.length()==k2.length()){
            max_str = k1;
            min_str = k2;
        }else if(k1.length()>k2.length()){
            max_str = k1;
            min_str = k2;
        }else{
            max_str = k2;
            min_str = k1;
        }
        int index = 0;
        for(int x=min_str.length();x>=0;x--){
            int b = x;
            boolean flag = false;
            for(int y=0;y<=min_str.length()-x;y++){
                index++;
                int v = y;
                String wait_max = min_str.substring(v, b);
                if(max_str.contains(wait_max)){
                    max = wait_max;
                    flag = true;
                    break;
                }
                b++;
            }
            if(flag){
                break;
            }
        }
        System.out.println(index);
        System.out.println(max);
    }

}
String ms = "01012101121301";
String ds = "0121121301";

0121121301

ms.contain(ds.substring(x,y));
x
思路2
10个字符1次
1    0121121301    10    ms.contain(ds.substring(0,10));

9个字符串2次
2    012112130    9    ms.contain(ds.substring(0,9));
3     121121301    9    ms.contain(ds.substring(1,10));

8个字符3次
4       01211213    8    ms.contain(ds.substring(0,8));
5        12112130    8    ms.contain(ds.substring(1,9));
6       21121301    8    ms.contain(ds.substring(2,10));

7个字符4次
7    0121121        7    ms.contain(ds.substring(0,7));
8     1211213    7    ms.contain(ds.substring(1,8));
9      2112130    7    ms.contain(ds.substring(2,9));
10       1121301    7    ms.contain(ds.substring(3,10));


思路1
String temp_max = 0121,

int x = 0;
int y= 10;
ms.contain(ds.substring(x,y));

1    0121121301    ms.contain(ds.substring(0,10));
2    012112130     ms.contain(ds.substring(0,9));
3    01211213      ms.contain(ds.substring(0,8));
4    0121121       ms.contain(ds.substring(0,7));
5    012112        ms.contain(ds.substring(0,6));
6    01211         ms.contain(ds.substring(0,5));
7    0121          ms.contain(ds.substring(0,4));

8    121121301     ms.contain(ds.substring(1,10));
9    12112130      ms.contain(ds.substring(1,9));
10    1211213      ms.contain(ds.substring(1,8));
11    121121       ms.contain(ds.substring(1,7));
12    12112        ms.contain(ds.substring(1,6));
13    1211         ms.contain(ds.substring(1,5));
14    121          ms.contain(ds.substring(1,4));

15    21121301    ms.contain(ds.substring(2,10));
16    2112130     ms.contain(ds.substring(2,9));
17    211213      ms.contain(ds.substring(2,8));
18    21121       ms.contain(ds.substring(2,7));

19    1121301        ms.contain(ds.substring(3,10));
    
 
  

 

 

 

转载于:https://www.cnblogs.com/ak23173969/p/6735829.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值