编辑距离

nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; padding-right:0px; color:rgb(83,113,197); text-decoration:none; padding-top:0px">

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描写叙述

如果字符串的基本操作仅为:删除一个字符、插入一个字符和将一个字符改动成还有一个字符这三种操作。

我们把进行了一次上述三种操作的随意一种操作称为进行了一步字符基本操作。

以下我们定义两个字符串的编辑距离:对于两个字符串a和b。通过上述的基本操作。我们能够把a变成b或b变成a,那么字符串a变成字符串b须要的最少基本字符操作步数称为字符串a和字符串b的编辑距离。

比如:a="ABC",b="CBCD",则a与b的编辑距离为2。

你的任务就是:编一个高速的程序来计算随意两个字符串的编辑距离。

输入

输入包括多组測试数据。

每组測试数据一行,为字符串A和字符串B。

字符串的长度不大于1024。且全为字母。

输出

编辑距离。

演示样例输入

ABC CBCD

演示样例输出

2

提示

 

来源

ZJGSU
由a串变为b串,三种操作,写成二维的dp后,dp[i][j]代表a串匹配到i,b串匹配到j时一共须要的步数。

假设s1[i] == s2[j]那么直接能够从 dp[i-1][j-1]得到。或是dp[i-1][j]+1代表加入一个字符,dp[i][j-1]+1代表删除一个字符中得到
假设不同样。那么和上面同样,仅仅须要变化为dp[i-1][j-1]+1代表改动一个字符。
 
#include <cstdio>

#include <cstring>

#include <algorithm>

using namespace std;

char s1[1200] , s2[1200] ;

int dp[1200][1200] ;

int main()

{

    int i , j , l1 , l2 ;

    while(scanf("%s %s", s1, s2)!=EOF)

    {

        memset(dp,0,sizeof(dp));

        l1 = strlen(s1) ;

        l2 = strlen(s2) ;

        for(i = 0 ; i <= l1 ; i++)

            dp[i][0] = i ;

        for(j = 0 ; j <= l2 ; j++)

            dp[0][j] = j ;

        for(i = 1 ; i <= l1 ; i++)

        {

            for(j = 1 ; j <= l2 ; j++)

            {

                if( s1[i-1] == s2[j-1] )

                    dp[i][j] = min(dp[i-1][j-1],min(dp[i-1][j]+1,dp[i][j-1]+1) );

                else

                    dp[i][j] = min(dp[i-1][j-1]+1,min(dp[i-1][j]+1,dp[i][j-1]+1) ) ;

            }

        }

        printf("%d\n", dp[l1][l2]);

    }

    return 0;

}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

最新文章

  1. [01] cocos2d-x开发环境搭建
  2. 使用自签名的方式创建Docker私有仓库
  3. JS的toFixed方法设置小数点位数后再进行计算,数据出错问题
  4. input 获取当前id,name
  5. Python 入門語法和類型(转载学习)
  6. Oracle 动态视图4 V$SESSION_WAIT &amp; V$SESSION_EVENT
  7. qt 设置背景图片
  8. (转载)将DELPHI数据库连接写进INI配置文件中
  9. php开发通用采集程序
  10. oracle去除字符串中间的空格
  11. python alembic which comes from SQLalchemy
  12. 基于UDP协议的网络编程
  13. ubuntu 安装 lamp
  14. yarn卸载或增加节点
  15. phpredis Redis集群 Redis Cluster
  16. nginx源码安装教程(CentOS)
  17. ZH奶酪:Python 中缀表达式转换后缀表达式
  18. 飘雪效果的swf
  19. tarjan算法--cojs 1298. 通讯问题
  20. Linux rsync 企业级应用

热门文章

  1. Multi-core compute cache coherency with a release consistency memory ordering model
  2. BZOJ 1695 [Usaco2007 Demo]Walk the Talk 链表+数学
  3. 用Apache Ivy实现项目里的依赖管理 分类: C_OHTERS 2014-07-06 18:11 564人阅读 评论(0) 收藏
  4. .net下载优酷1080P视频
  5. [Grid Layout] Use the minmax function to specify dynamically-sized tracks
  6. Django + Apache + wsgi配置和环境搭建(ubuntu)
  7. 百度UEditor上传图片-再再总结一次
  8. 【t004】切割矩阵
  9. 在深入分析:Fragment与Activity一些互动的方式(一,使用Handler)
  10. windows server 安装 mysql – 畅玩Coding