添加链接描述
题意:给定两个字符串s1和s2,每次可以对两个字符串删除首字母或者末字母,求最少删除几个能使得s1和s2相等。
思路:答案显然为len(s1)+len(s2)-max(LIS),有点水,算是复习一下求最长公共子串。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+5;
int T,dp[maxn][maxn];
int main()
{
scanf("%d",&T);
while(T--)
{
string str1,str2;
int ans=0;
cin>>str1>>str2;
memset(dp,0,sizeof(dp));
for(int i=0;i<str1.size();++i)
for(int j=0;j<str2.size();++j)
if(str1[i]==str2[j])
{
if(i==0||j==0) dp[i][j]=1;
else dp[i][j]=dp[i-1][j-1]+1;
}
for(int i=0;i<str1.size();++i) for(int j=0;j<str2.size();++j) ans=max(ans,dp[i][j]);
printf("%d\n",str1.size()+str2.size()-2*ans);
}
}