字符串旋转

正文索引 [隐藏]

题目描述:

给定两字符串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(表示是否能按要求匹配两个字符串)。

输入样例1:

youzan;zanyou

输出样例1:

true

输入样例2:

youzan;zyouan

输出样例2:

false

解题思路:

水题,直接暴力破解就完事啦。

AC代码:

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