题解:CF559B Equivalent Strings
CF559B Equivalent Strings 题解
题目描述
吐槽一下,题目翻译有歧义。
思路分析
你会发现,当你需要判断字符串 \(a,b\) 是否等价时,如果长度为偶数,需要继续判断字符串 \(a\) 拆分的字串。
所用知识
s.substr(i,j)//在字符串s中,从位置i开始截取长度为j的字串
参考代码
#include <bits/stdc++.h>
using namespace std;
namespace Raiden
{
bool check(string a,string b)//判断a、b是否等价
{
int lena=a.size();
if(lena%2)// 如果长度为奇数
{
return a==b;// a、b等价即为字符串相等
}
else//否则长度为偶数
{
//a分成两段
string s1=a.substr(0,lena/2);//前半段
string s2=a.substr(lena/2,lena/2);//后半段
//b分成两段
string s3=b.substr(0,lena/2);//前半段
string s4=b.substr(lena/2,lena/2);//后半段
return (check(s1,s4)&&check(s2,s3))||(check(s1,s3)&&check(s2,s4));
}
}
int work()
{
string a,b;
cin>>a>>b;
cout<<(check(a,b)?"YES":"NO")<<endl;
return 0;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
return Raiden::work();
}