思路:考的是字符串的编辑距离。在蓝桥杯2012年决赛上出现过。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int dp[200050][20]; char targ[20],ans; int Min(int a,int b,int c) { int temp; temp=a<b?a:b; return temp<c?temp:c; } int getMin(char *str1,char *str2) { int l1,l2,i,j; l1=strlen(str1); l2=strlen(str2); for(i=1;i<=l2;i++) dp[0][i]=i; int ans=l2; for(i=0;i<l1;i++) { for(j=0;j<l2;j++) { if(str1[i]==str2[j]) dp[i+1][j+1]=Min(dp[i][j],dp[i][j+1]+1,dp[i+1][j]+1); else dp[i+1][j+1]=Min(dp[i][j+1],dp[i+1][j],dp[i][j])+1; } ans=min(ans,dp[i+1][l2]); } return ans; } void solve(char *str1,char *str2) { int i,j,l1,l2,t; l1=strlen(str1); l2=strlen(str2); if(l2*2<l1) { for(i=0;i<l1;i++) str1[i+l1]=str1[i]; str1[i+l1]='