CodeForces - 1506C c++

**

原题如下

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.

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_52559308/article/details/116331783