CodeForces - 1506C c++

**

原题如下

**

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;
}
上一篇:【LeetCode】1319.连通网络的操作次数(Number of Operations to Make Network Connected)


下一篇:Array