题目
如果两字符串 a, b 满足下面两个条件之一,我们称 a 弱等于 b,或者 b 弱等于 a:
- a 等于 b
- a, b 的长度相同,并且长度都为偶数,把字符串 a 串从正中间拆开,拆成 , ,同样把 b 串拆成 , 。 弱等于 同时 弱等于 ,或者 弱等于 同时 弱等于 。
输入格式
输入共两行,每行一个字符串,字符串只包含小写字母。
输出格式
如果输入两个字符串是弱等于的,输出"YES",否则输出"NO"。
代码
#include<bits/stdc++.h>
using namespace std;
bool judge(string a, string b){
if(a == b)
return true;
else{
if(a.length() == b.length() && (a.length() / 2 != 0)){
string a1 = a.substr(0, a.size() / 2);
string a2 = a.substr(a.size() / 2, a.size() / 2);
string b1 = b.substr(0, b.size() / 2);
string b2 = b.substr(b.size() / 2, b.size() / 2);
return (judge(a1, b1) && judge(a2, b2)) || (judge(a1, b2) && judge(a2, b1));
}else{
return false;
}
}
}
int main(){
string a, b;
cin >> a >> b;
bool flag = judge(a, b);
if(flag)
cout << "YES";
else{
cout << "NO";
}
return 0;
}
总结
substr有2种用法:
假设:string s = "0123456789";
string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789"
string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = "567"