zoukankan      html  css  js  c++  java
  • 编辑距离(动规)

    题意:设A,B是两个字符串。我们现在要用最少的操作的次数,将字符串A转换成字符串B,这里所说的字符操作有三种:

    (1)删除一个字符

    (2)插入一个字符

    (3)将一个字符改为另一个字符

    任务:

    对任意A,B计算出字符串A转换成字符串B的最少操作次数

    输入:第一行为字符串A

             第二行为字符串B

     长度都小于200

    输出:

    最小操作次数

    【思路】:与最长公共子序列相似,还是要看最后一个是否相同

    【代码】

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 using namespace std;
     5 int f[202][202];//f[m][n]为长度为m和n的两个字符串的最少操作次数 
     6 int main()
     7 {
     8     string s1,s2;
     9     cin>>s1>>s2;
    10     int m=s1.length();
    11     int n=s2.length();
    12     for(int i=1;i<=m;i++)
    13     f[i][0]=i;//当第二个串长度为0时就要删除i个数 
    14     for(int i=1;i<=n;i++)
    15     f[0][i]=i;//当第一个串长度为0时需要填上i个数 
    16     for(int i=1;i<=m;i++)
    17     {
    18         for(int j=1;j<=n;j++)
    19         {
    20             if(s1[i-1]==s2[j-1])//让最后两个数相同时 
    21             f[i][j]=f[i-1][j-1];//f[i][j]的操作次数就是f[i-1][j-1]的操作次数 
    22             else    
    23            f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1])+1; 
    24          //否则就从删掉最后一个数f[i-1][j],改一个数f[i-1][j-1],插入一个数f[i][j-1]中取一个
    25          //最小的,最后还要加1,因为还要有这一步的操作次数 
    26         }
    27     }
    28     printf("%d",f[m][n]);
    29     return 0;
    30 }
    View Code
  • 相关阅读:
    .NET面试题系列[2]
    .NET面试题系列[1]
    被淡忘的c#析构函数
    关于Spring IOC容器解释
    工作随笔记 点击除div自身之外的地方,关闭自己
    js获得控件位置
    PHP如何判断对象为空的方法分享
    PHP 网页调用本地exe程序实例
    PHP jQuery实现上传图片时预览图片的功能实例
    Yii 自带的分页实例
  • 原文地址:https://www.cnblogs.com/zzyh/p/6682277.html
Copyright © 2011-2022 走看看