zoukankan      html  css  js  c++  java
  • 编辑距离问题

    【题目描述】

    设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括:

    (1)删除一个字符;

    (2)插入一个字符;

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

    将字符串A变换为字符串B所用的最少字符操作数称为字符串A到B的编辑距离,记为d(A,B)。试编写程序,对任给的2个字符串A和B,计算出它们的编辑距离d(A,B)。

    【输入描述】

    输入有两行。

    第一行是字符串A;

    第二行是字符串B。

    【输出描述】

    输出只有一行,即编辑距离d(A,B)。

    【样例输入】

    fxpimu

    xwrs

    【样例输出】

    5

    【数据范围及提示】

    40%的数据字符串A、B的长度均不超过100;

    100%的数据字符串A、B的长度均不超过4000。

    源代码:
    
    #include<cstdio>
    #include<iostream>
    using namespace std;
    int m,n,ans,f[4001][4001]; //最优编辑距离。 
    string s1,s2;
    int main()
    {
        cin>>s1>>s2;
        m=s1.size();
        n=s2.size();
        for (int a=1;a<=m;a++)
          f[a][0]=a; //两串相较,若其一为0,则另一串长即为编辑步数。 
        for (int a=1;a<=n;a++)
          f[0][a]=a; //同理于上。
        for (int a=1;a<=m;a++)
          for (int b=1;b<=n;b++)
            if (s1[a-1]==s2[b-1])
              f[a][b]=f[a-1][b-1]; //相同则不作处理。 
            else
              {
                  f[a][b]=f[a-1][b]<f[a][b-1]?f[a-1][b]:f[a][b-1];
                  f[a][b]=f[a][b]<f[a-1][b-1]?f[a][b]:f[a-1][b-1];
                  f[a][b]++; //相异则取其最小值。 
              }
        printf("%d",f[m][n]);
        return 0;
    }
  • 相关阅读:
    BSOJ 4490 避难向导
    【水题】求条件最大值
    【模拟】神奇的树
    【模拟】2014ACM/ICPC亚洲区北京站-A-(Curious Matt)
    【模拟】refresh的停车场
    数据结构实验之栈三:后缀式求值 (stack)
    【STL】Message Flood(set)
    【STL】完美网络(优先队列实现)
    【搜索BFS】走迷宫(bfs)
    【STL】deque双向队列(转载)
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5297409.html
Copyright © 2011-2022 走看看