zoukankan      html  css  js  c++  java
  • 1183 编辑距离(51NOD)(dp)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183

    1183 编辑距离(51NOD)(dp)
    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

    编辑距离,又称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


    思路:vis[i][j] 表示 str1 串前 i 个字符 和 str2 串 前 j 个字符 匹配花费的代价(操作次数)
          则    vis[i][j] = min(vis[i-1][j-1] + temp, min(vis[i-1][j] +1 , vis[i][j-1] +1)) ; // str1[i] == str2[j] 时 temp=0,否则temp = 1 ;

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std ; 
    
    #define maxn 1000+50 
    char str1[maxn] ; 
    char str2[maxn] ; 
    
    int temp ; 
    int vis[maxn][maxn] ; 
    
    int main(){
        while(~scanf("%s%s" , str1 , str2)){
            int len1 = strlen(str1) ; 
            int len2 = strlen(str2) ; 
            if(len1 == 0 ){
                printf("%d
    " , len2) ; 
                continue ; 
            }
            if(len2 == 0 ){
                printf("%d
    " , len1) ; 
                continue ; 
            }
         // vis[i][j] 表示 str1 串前 i 个字符 和 str2 串 前 j 个字符 匹配花费的代价(操作次数)
    for(int i = 0 ; i <= len1 ; i ++ ) { vis[i][0] = i ; } for(int i = 0 ; i <= len2 ; i++ ) { vis[0][i] = i ; } for(int i=1 ; i<=len1 ; i++){ for(int j=1 ; j<=len2 ; j++){ if(str1[i-1] == str2[j-1]){ temp = 0 ; } else { temp = 1 ; } vis[i][j] = min(vis[i-1][j-1] + temp, min(vis[i-1][j] +1 , vis[i][j-1] +1)) ; } } printf("%d " , vis[len1][len2]) ; } return 0 ; }
  • 相关阅读:
    关于JQ的$.deferred()
    JS去掉数组的重复项
    JS中iframe相关的window.self,window.parent,window.top
    JQ的live(),on(),deletage(),bind()几个的区别
    个人对闭包的理解
    ajax 代码
    Don't use runAllManagedModulesForAllRequests="true" when getting your MVC routing to work
    SQL语句收集
    性能速度
    ADO.NET(SqlConnection、SqlCommand、SqlDataAdapter、SqlTransaction、SqlParameter、DataSet)
  • 原文地址:https://www.cnblogs.com/yi-ye-zhi-qiu/p/7578355.html
Copyright © 2011-2022 走看看