标签:插入 动态 char space 字符替换 开始 bsp 示例 names
第1行:字符串a(a的长度 <= 1000)。
第2行:字符串b(b的长度 <= 1000)。
输出a和b的编辑距离
kitten
sitting
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\n",dp[len1][len2]); 18 return 0; 19 }
标签:插入 动态 char space 字符替换 开始 bsp 示例 names
原文地址:http://www.cnblogs.com/xingkongyihao/p/7219421.html