题解: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();
}

posted @ 2024-08-01 13:31  Ryan_Adam  阅读(3)  评论(0编辑  收藏  举报