版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42449444/article/details/102006068
给定两字符串A和B,如果能将A从中间某个位置分割为左右两部分字符串(都不为空串),并将左边的字符串移动到右边字符串后面组成新的字符串可以变为字符串B时返回true。
例如:如果A=‘youzan’,B=‘zanyou’,A按‘you’‘zan’切割换位后得到‘zanyou’和B相同返回true。
2个不为空的字符串(说明:输入一个字符串以英文分号";"分割为2个字符串) 例如:youzan;zanyou 即为A=‘youzan’,B=‘zanyou’。
输出true或false(表示是否能按要求匹配两个字符串)。
youzan;zanyou
true
youzan;zyouan
false
水题,直接暴力破解就完事啦。
#include <bits/stdc++.h>
using namespace std;
#define Up(i,a,b) for(int i = a; i <= b; i++)
int main()
{
string s;
getline(cin,s);
int _ = s.find(';');
string sa = s.substr(0,_); //获取子串sa
int lena = sa.length();
string sb = s.substr(_+1,s.length()-1); //获取子串sb
int lenb = sb.length();
//cout << sa << endl << sb << endl;
bool flag = false; //判断字符串sa旋转后是否能等于sb
Up(i,1,lena) //以i为对称点来进行字符串旋转
{
string t = sa.substr(i,lena-i) + sa.substr(0,i);
//cout << t<< endl;
if(t == sb)
{
flag = true;
break;
}
}
printf("%s\n",flag?"true":"false");
return 0;
}