常见的子串问题

在我们学习一门新的语言时,例如c或者java时,我们不太熟习怎么去进行数据在字符串层次上的比较,比如常见的问题有最大公共子串,我们可以尝试采用

类似于一个二维数组的形式来进行字符串的比较,得出最大公共子串,那么这里就演示一下

比如:"abcde"和"abc"这个字符串的比较,可能你会觉得这个子串很短,一眼就可以看出来,当然我这里只是演示直观

如果你有更长的字符串不妨可以尝试一下。

这里采用的是一个二维数组的形式比较是否相等 如果相等就让其中的值为1,那么如果连续相等怎么办,自然是斜对角+1=得到当前

的相等数目 这样可以更好的进行比较 下面是代码

import java.util.ArrayList;
//重复的长度
//重复的段落为
public class Test2A {
    private static ArrayList<Character> array =new ArrayList<Character>();
    public static void main(String[] args) {
        String A="abcdefhijk";
        String B="abcd";
        fun(A,B);
    }
    private static void fun(String a, String b) {
        char[] arr1=a.toCharArray();
        char[] arr2=b.toCharArray();
        
        int[][] test=new int[arr1.length+1][arr2.length+1];
        int max=0;
        int maxi=0;
        for(int i=1;i<arr1.length+1;i++){
            for(int j=1;j<arr2.length+1;j++){
                if(arr1[i-1]==arr2[j-1]){
                    test[i][j]=test[i-1][j-1]+1;
                }
                if(max<test[i][j]){
                    max=test[i][j];
                    maxi=i-1;
                }
            }
        }
        for(int i=maxi-max+1,n=max;n>0&&i<arr1.length;n--,i++){
            array.add(arr1[i]);
        }
        System.out.println("长度为:"+max);
        System.out.println(array.toString());
    }

}
恐惧源于无知,代码改变世界
原文地址:https://www.cnblogs.com/ad-zhou/p/8661910.html