**
**
You are given the strings a and b, consisting of lowercase Latin letters. You can do any number of the following operations in any order:
if |a|>0 (the length of the string a is greater than zero), delete the first character of the string a, that is, replace a with a2a3…an;
if |a|>0, delete the last character of the string a, that is, replace a with a1a2…an−1;
if |b|>0 (the length of the string b is greater than zero), delete the first character of the string b, that is, replace b with b2b3…bn;
if |b|>0, delete the last character of the string b, that is, replace b with b1b2…bn−1.
Note that after each of the operations, the string a or b may become empty.
For example, if a=“hello” and b=“icpc”, then you can apply the following sequence of operations:
delete the first character of the string a ⇒ a=“ello” and b=“icpc”;
delete the first character of the string b ⇒ a=“ello” and b=“cpc”;
delete the first character of the string b ⇒ a=“ello” and b=“pc”;
delete the last character of the string a ⇒ a=“ell” and b=“pc”;
delete the last character of the string b ⇒ a=“ell” and b=“p”.
For the given strings a and b, find the minimum number of operations for which you can make the strings a and b equal. Note that empty strings are also equal.
Input
The first line contains a single integer t (1≤t≤100). Then t test cases follow.
The first line of each test case contains the string a (1≤|a|≤20), consisting of lowercase Latin letters.
The second line of each test case contains the string b (1≤|b|≤20), consisting of lowercase Latin letters.
Output
For each test case, output the minimum number of operations that can make the strings a and b equal.
Input
5
a
a
abcd
bc
hello
codeforces
hello
helo
dhjakjsnasjhfksafasd
adjsnasjhfksvdafdser
Output
0
2
13
3
20
题意很简单,就是计算从字符串b增删字符变成a所需要的操作数
删一个与加一个都是需要一次操作数
而易知,操作数等于两个字符串长度之和,减去两个字符串相同的最大字符串长度
AC代码
暴力解出
#include<iostream> #include<cstring> using namespace std; int t,x,y,ans,ansmax; string a,b; void ade(int i,int j){ ans++; if( a[i+1] == b[j+1] ){ if(i<a.size()-1 && j<b.size()-1) ade(i+1, j+1); } return ; } int main(){ cin >> t; while(t--){ cin >> a >> b; for(int i=0; i<a.size() ;i++){ for(int j=0; j<b.size() ;j++){ ans=0; if(a[i] == b[j])ade(i,j); if(ans>ansmax){ ansmax = ans; x = i; y = j; } } } cout << (a.size() - ansmax + b.size() - ansmax) << endl; ansmax = 0; } return 0; }