zoukankan      html  css  js  c++  java
  • 51nod 1183 编辑距离

      编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
      例如将kitten一字转成sitting:
        sitten (k->s)
        sittin (e->i)
        sitting (->g)
      所以kitten和sitting的编辑距离是3。俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。
    给出两个字符串a,b,求a和b的编辑距离。
    Input
    第1行:字符串a(a的长度 <= 1000)。
    第2行:字符串b(b的长度 <= 1000)。
    Output
    输出a和b的编辑距离
    Input示例
    kitten
    sitting
    Output示例
    3



    动态规划题目,设dp[i][j]为a前i个字符和b前j个字符的编辑距离,
    那么当a[i] == b[j](字符串从0开始)时,dp[i+1][j+1] = min(dp[i][j],min(dp[i][j+1]+1,dp[i+1][j]+1));
    当不等于时,dp[i+1][j+1] = min(dp[i][j]+1,min(dp[i+1][j]+1,dp[i][j+1]+1));
    要注意的是dp[0][j] 和 dp[i][0]这两种情况。
     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 using namespace std;
     5 char str1[1010], str2[1010];
     6 int dp[1010][1010];
     7 int main(){
     8     scanf("%s%s",str1,str2);
     9     int len1 = strlen(str1), len2 = strlen(str2);
    10     for(int i = 0; i <= len2; i ++) dp[i][0] = dp[0][i] = i;
    11     for(int i = 0; i < len1; i ++){
    12         for(int j = 0; j < len2; j ++){
    13             if(str1[i] == str2[j]) dp[i+1][j+1] = min(dp[i][j],min(dp[i][j+1]+1,dp[i+1][j]+1));
    14             else dp[i+1][j+1] = min(dp[i][j]+1,min(dp[i+1][j]+1,dp[i][j+1]+1));
    15         }
    16     }
    17     printf("%d
    ",dp[len1][len2]);
    18     return 0;
    19 }
     
  • 相关阅读:
    解决pyinstaller 打包后运行exe程序出现的"ModuleNotFindError"
    【Tensorflow专题-03】深层神经网络
    【Tensorflow专题-02】使用tensorflow训练神经网络
    【Tensorflow专题-01】深度学习应用介绍及tensorflow基本使用
    Github 简明教程
    Composer 安装与使用
    为jQuery的$.ajax设置超时时间
    thinkphp 数据库表多字段排序
    TP5如何隐藏入口文件index.php
    Atom编辑器快捷键大全
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/7219421.html
Copyright © 2011-2022 走看看