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
  • 相关阅读:
    GSS3 SPOJ 1716. Can you answer these queries III gss1的变形
    GSS1 spoj 1043 Can you answer these queries I 最大子段和
    Codeforces Round #197 (Div. 2) C,D两题
    sgu 185 最短路建网络流
    CF 208E
    QTREE2 spoj 913. Query on a tree II 经典的倍增思想
    BZOJ 1146: [CTSC2008]网络管理Network 树链剖分+线段树+平衡树
    ubuntu安装vim
    历史背景更新模型
    码本模型
  • 原文地址:https://www.cnblogs.com/zzyh/p/6682277.html
Copyright © 2011-2022 走看看