题目描述:
设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。这里所说的字符操作共有三种:
1. 删除一个字符;
2. 插入一个字符;
3. 将一个字符改为另一个字符。
对任给的两个字符串A和B,计算出将字符串A变换为字符串B所用的最少字符操作次数。
输入:
第一行为字符串A;第二行为字符串B;字符串A和B的长度均小于200。
输出:
只有一个正整数,为最少字符操作次数。
样例输入
sfdxbqw
gfdgw
样例输出
4
1 import java.util.Scanner; 2 public class Main { 3 public static void main(String[] args){ 4 Scanner scan=new Scanner(System.in); 5 6 String s1=scan.nextLine(); 7 String s2=scan.nextLine(); 8 9 int[][] arry=new int[s2.length()][s1.length()]; 10 11 for(int i=0;i<s2.length();i++){ 12 for(int j=0;j<s1.length();j++){ 13 if(s1.charAt(j)==s2.charAt(i)) 14 arry[i][j]=1; 15 else{ 16 arry[i][j]=0; 17 } 18 } 19 } 20 int flag=0,a=0,b=0,sum=0,j=0,i=0; 21 22 for(i=0;i<s2.length();i++){ 23 for(j=flag;j<s1.length();j++){ 24 if(arry[i][j]==1){ 25 sum+=Math.max(i-a, j-b); 26 a=i+1; 27 b=j+1; 28 flag=j; 29 } 30 } 31 if(b==s1.length()){ 32 sum+=s2.length()-i-1; 33 break; 34 }else if(a==s2.length()){ 35 sum+=s1.length()-b; 36 break; 37 } 38 } 39 if(a!=s2.length()&&b!=s1.length()){ 40 sum+=Math.max(i-a, j-b); 41 } 42 if(sum>Math.max(s1.length(), s2.length())){ 43 System.out.println(Math.max(s1.length(), s2.length())); 44 }else{ 45 System.out.println(sum); 46 } 47 48 } 49 }
解题思路:
创建二维数组,比较两个字符串,相等值为一,否则为零。然后遍历二维数组,遇到1记录该点的坐标,然后遍历起始点下一位开始。遍历完成后,加上剩余字符的长度即可
动态规划