cf题目链接
题意简述:两字符串a,b,每次可以将一字符串去掉第一个字符或最后一个字符串,问至少多少次操作可以使a=b
解法:观察范围,T<=100,|a|<=20,|b|<=20,都很小,暴力即可,时间复杂度为Taabb,时间给的两秒,能过
AcCode
#include<iostream>
#include<algorithm>
#define inf 0x3f3f3f3f
#define int long long
using namespace std;
const int N = 1e5 + 100;
int dp[100];
string str1, str2;
int len1, len2, maxlen;
inline int getAns(int beg,int now) {
int len = 0;
int up = 0;
for (int j = beg; j < len2 && now + up < len1; j++) {
if (str1[now + up] != str2[j]) {
maxlen = max(maxlen, len);
len = 0;
}
else {
len++;
}
up++;
}
return len;
}
signed main() {
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--) {
cin >> str1 >> str2;
if (str2.length() > str1.length()) swap(str1, str2);
maxlen = 0;
len1 = str1.length();
len2 = str2.length();
for (int i = 0; i < len1; i++) {
if (len1 - i <= maxlen) break;
for (int j = 0; j < len2; j++) {
maxlen = max(maxlen, getAns(j, i));
}
}
cout << len1 + len2 - 2 * maxlen << endl;
}
}