题解 | #计算字符串的编辑距离#

计算字符串的编辑距离

http://www.nowcoder.com/practice/3959837097c7413a961a135d7104c314

#include<iostream>
using namespace std;

int f[1001][1001];    //s1中前i个字符与s2中前j个字符的编辑距离
int Distance(string s1, string s2)
{
    int n = s1.length(),  m = s2.length();
    //初始化f
    for(int i = 0; i < n ;i++)    
        f[i][0] = i;     //要使s1中前i个字符与s2前0个字符相同,只能删除s1前i个
    for(int j = 0; j < m; j++)
        f[0][j] = j;    // 同上,要使s1中前0个字符与s2前j个字符相同,只能s1增加j个
    
    for(int i = 1; i < n ;i++)     //在输入字符串前加了个‘ ’,所以是1~n
        for(int j = 1; j < m; j++)    //同上
        {
            f[i][j] = min(f[i-1][j]+1, f[i][j-1]+1);  //增加or删除
            if(s1[i] != s2[j])
                f[i][j] = min(f[i][j], f[i-1][j-1]+1);  //or替换
            else
                f[i][j] = min(f[i][j], f[i-1][j-1]);
        }
    return f[n-1][m-1];     
}
int main()
{
    string s1,s2;
    cin>>s1; s1 = ' ' + s1;   //小tip,在s前面加一个‘ ’,之后计算编辑距离可以从下标1开始
    cin>>s2; s2 = ' ' + s2;
    cout << Distance(s1, s2);

    return 0;
}

全部评论
代码看着很舒服
点赞 回复 分享
发布于 2023-05-10 22:26 四川

相关推荐

不愿透露姓名的神秘牛友
07-04 14:23
steelhead:你回的有问题,让人感觉你就是来学习的
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务