Java 比较两个字符串并检查是否可以通过删除字符来生成公共字符串

Java 比较两个字符串并检查是否可以通过删除字符来生成公共字符串,java,arrays,string,algorithm,Java,Arrays,String,Algorithm,我试图解决任意给定两个字符串的ASCII距离问题。我编写了代码来检查两个字符串之间是否存在不匹配的字符,并计算了部分ascii距离。但我仍然需要比较两个字符串(如下图所示),并得出一个可以用这些字符串构建的公共字符串。下面是一个例子 Let's say s1="elete" s2="leet" Expected Output: "let" 在上面的例子中,我如何从两个字符串中识别额外的字符并找到一个公共字符串 我的代码如下所示,它所做的是比较两个字符串并计算两个字符串之间不匹配字符的ASCI

我试图解决任意给定两个字符串的ASCII距离问题。我编写了代码来检查两个字符串之间是否存在不匹配的字符,并计算了部分ascii距离。但我仍然需要比较两个字符串(如下图所示),并得出一个可以用这些字符串构建的公共字符串。下面是一个例子

Let's say s1="elete" s2="leet"

Expected Output:
"let"
在上面的例子中,我如何从两个字符串中识别额外的字符并找到一个公共字符串

我的代码如下所示,它所做的是比较两个字符串并计算两个字符串之间不匹配字符的ASCII分数

代码:

类解决方案{
public int minimumDeleteSum(字符串s1、字符串s2){
整数和=0;
char[]cstr1=s1.toCharArray();
char[]cstr2=s2.toCharArray();
字符串res=比较字符(cstr1、cstr2);
sum+=Integer.parseInt(res.split(“,”[1]);
字符串news1=res.split(“,”[0];
res=比较字符(cstr2,cstr1);
sum+=Integer.parseInt(res.split(“,”[1]);
字符串news2=res.split(“,”[0];
/*希望在此添加代码以获取所有不允许构建公共字符串的字符并获取其ASCII值。如何解决此问题*/
回报金额;
}
公共字符串比较字符(char[]cstr1,char[]cstr2){
int ascii_分数=0;
int标志=0;
StringBuilder sb=新的StringBuilder();
对于(int i=0;i的重复项,我稍微修改了代码以符合您的问题

import java.util.Arrays;
import java.util.List;

public class LongestCommonSubstring {
    public static char[] lcs(List l1, List l2) {
        int[][] d = new int[l1.size() + 1][l2.size() + 1];
        for (int i1 = 1; i1 <= l1.size(); i1++) {
            for (int i2 = 1; i2 <= l2.size(); i2++) {
                if (l1.get(i1 - 1).equals(l2.get(i2 - 1))) {
                    d[i1][i2] = d[i1 - 1][i2 - 1] + 1;
                } else {
                    d[i1][i2] = Math.max(d[i1 - 1][i2], d[i1][i2 - 1]);
                }
            }
        }
        int i1 = l1.size(), i2 = l2.size();
        char[] result = new char[d[i1][i2]];
        while (i1 > 0 && i2 > 0) {
            if (l1.get(i1 - 1).equals(l2.get(i2 - 1))) {
                result[d[i1][i2] - 1] = ((String) l1.get(i1 - 1)).charAt(0);
                i1 -= 1;
                i2 -= 1;
            } else if (d[i1][i2] == d[i1 - 1][i2]) {
                i1 -= 1;
            } else {
                i2 -= 1;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        List l1 = Arrays.asList("elete".split(""));
        List l2 = Arrays.asList("leet".split(""));
        System.out.println(new String(lcs(l1, l2)));
    }
}
导入java.util.array;
导入java.util.List;
公共类最长公共子字符串{
公共静态字符[]lcs(列表l1、列表l2){
int[][]d=新的int[l1.size()+1][l2.size()+1];
对于(int i1=1;i1 0){
如果(l1.get(i1-1).等于(l2.get(i2-1))){
结果[d[i1][i2]-1]=((字符串)l1.get(i1-1)).charAt(0);
i1-=1;
i2-=1;
}如果(d[i1][i2]==d[i1-1][i2]){
i1-=1;
}否则{
i2-=1;
}
}
返回结果;
}
公共静态void main(字符串[]args){
列表l1=Arrays.asList(“elete.split”(“”);
List l2=Arrays.asList(“leet.split”(“”);
System.out.println(新字符串(lcs(l1,l2));
}
}
查找LCS(最长的公共子序列)算法
import java.util.Arrays;
import java.util.List;

public class LongestCommonSubstring {
    public static char[] lcs(List l1, List l2) {
        int[][] d = new int[l1.size() + 1][l2.size() + 1];
        for (int i1 = 1; i1 <= l1.size(); i1++) {
            for (int i2 = 1; i2 <= l2.size(); i2++) {
                if (l1.get(i1 - 1).equals(l2.get(i2 - 1))) {
                    d[i1][i2] = d[i1 - 1][i2 - 1] + 1;
                } else {
                    d[i1][i2] = Math.max(d[i1 - 1][i2], d[i1][i2 - 1]);
                }
            }
        }
        int i1 = l1.size(), i2 = l2.size();
        char[] result = new char[d[i1][i2]];
        while (i1 > 0 && i2 > 0) {
            if (l1.get(i1 - 1).equals(l2.get(i2 - 1))) {
                result[d[i1][i2] - 1] = ((String) l1.get(i1 - 1)).charAt(0);
                i1 -= 1;
                i2 -= 1;
            } else if (d[i1][i2] == d[i1 - 1][i2]) {
                i1 -= 1;
            } else {
                i2 -= 1;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        List l1 = Arrays.asList("elete".split(""));
        List l2 = Arrays.asList("leet".split(""));
        System.out.println(new String(lcs(l1, l2)));
    }
}