1225: 字符串的修改

题目描述:

设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记录该点的坐标,然后遍历起始点下一位开始。遍历完成后,加上剩余字符的长度即可

 

动态规划

转载于:https://www.cnblogs.com/xiaozoushen/p/8022652.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值