KS26. 字符串最小变换次数
描述
给定两个字符串,已知可以使用三种方式进行变换输入描述
输入两个字符串输出描述
最小变换次数示例1
输入:
hello helle
输出:
1
C++ 解法, 执行用时: 6ms, 内存消耗: 416KB, 提交时间: 2020-09-10
#include <string> #include <vector> #include <iostream> int EditDistance(const std::string& left, const std::string& right) { std::vector<int> cost(left.size()+1, 0); for (size_t l = 0; l < left.size()+1; l++) { cost[l] = l; } for (size_t r = 0; r < right.size(); r++) { int diagonal = cost[0]; cost[0] = r+1; for (size_t l = 1; l <= left.size(); l++) { int old = cost[l]; cost[l] = std::min(std::min( cost[l-1]+1, cost[l]+1), diagonal + static_cast<int>(left[l-1] != right[r])); // std::cout << cost[l] << " "; diagonal = old; } // std::cout << std::endl; } return cost[cost.size()-1]; } int main(int argc, char** argv) { std::string left, right; std::getline(std::cin, left); std::getline(std::cin, right); std::cout << EditDistance(left, right); return 0; }
C 解法, 执行用时: 6ms, 内存消耗: 4236KB, 提交时间: 2020-12-30
#include<stdio.h> #include<string.h> #define Len 1000 int Min(int a,int b) { return a<b?a:b; } int main(void) { char a[Len],b[Len]; int dp[Len+1][Len+1]; int alen,blen; scanf("%s",&a); scanf("%s",&b); alen=strlen(a); blen=strlen(b); for(int i=0;i<alen;i++) dp[i][0]=i; //边界问题处理 for(int j=0;j<blen;j++) dp[0][j]=j; //边界问题处理 for(int i=1;i<=alen;i++) { for(int j=1;j<=blen;j++) { if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]; else { dp[i][j]=1+Min(dp[i-1][j-1],Min(dp[i][j-1],dp[i-1][j])); } } } printf("%d\n",dp[alen][blen]); return 0; }