获取两个字符串的最大公串(基础向)

最大公串

Java 编程中,获取两个字符串的最大公串是常见的对String的综合操作练习,本文是偏基础向,使用了基本的判断、循环与String的一些简单方法。
在这里插入图片描述

首先编写main主函数,用以调用获取最大公串的方法:

    public static void main(String[] args) {
        System.out.println("<========求最大公串========>");
		///1.获取两个字符串的最大公串
        s1 = "012345abcdef";
        s2 = "abcdefg2345ab";
        String[] s1Arr = publicString(s1,s2);
        if (s1Arr.length == 0){
            System.out.println("两字符串没有最大公串");
        }
        else {
            System.out.println("两字符串的最大公串为:");
            for (int i = 0; i < s1Arr.length; i++) {
                System.out.print(s1Arr[i]+", ");
            }
        }
    }

publicString(s1,s2)为自定义的获取最大公串的方法,返回值为一个字符串数组(因为可能不止一个),用s1Arr接收;
下面是publicString方法体:

    public static String[] publicString(String string1,String string2){
        //将两个字符串区分长短
        String maxstr = string1.length() > string2.length() ? string1 : string2;
        String minstr = string1.length() < string2.length() ? string1 : string2;
        //将两个字符串区转换为char数组
        char[] maxarr = maxstr.toCharArray();
        char[] minarr = minstr.toCharArray();
        int count = 1;//默认初始最大公串长度为1
        int count1 = 0;//标记最大公串个数
        String[] strArr = new String[maxarr.length];//新建一个字符串数组,用来存储最大公串

        //循环遍历两个字符数组,获取公共字符串
        for (int i = 0;i < minarr.length;i++){
            for (int j = 0;j<maxarr.length;j++){
                int tmp = 0;//临时标记公串长度
                if (minarr[i] == maxarr[j]){//首先找到相等的字符
                    //k循环查找从相等的字符开始向后有几个字符连续相等
                    for (int k=0;k<((minarr.length-i)<(maxarr.length-j)?(minarr.length-i):(maxarr.length-j));k++){
                        if (minarr[i+k] == maxarr[j+k]){//如果后续字符也相等,则公串长度+1
                            tmp++;
                        }else {//一旦不相等立即结束k循环
                            break;
                        }
                    }
                }
                if (tmp == count){//若新找的公串长度等于count,则添加进字符串数组
                    strArr[count1++] = minstr.substring(i,tmp+i);
                }
                if (tmp > count){//若新找的公串长度大于count,则重置字符串数组与公串个数,并将其添加进新数组
                    strArr = new String[maxarr.length];
                    count1 = 0;
                    strArr[count1++] = minstr.substring(i,tmp+i);
                    count = tmp;//使count等于新的公串长度
                }
            }

        }
        String[] StrArr1 = new String[count1];//新建一个长度等于公串个数的字符串数组
        for (int i = 0;i<count1;i++){   //将找到的最大公串遍历放进新数组
            StrArr1[i] = strArr[i];
        }
        return  StrArr1;
    }

运行结果为:
在这里插入图片描述
本练习有助于加深对for循环、String和数组的理解与应用,当然这只是本人的一次课堂作业练习,肯定有较多需要精简去冗的地方,请见谅,愿大家共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值