【每周例题】C++ 力扣 旋转字符串

旋转字符串

 题目

旋转字符串

 题目分析

方法1:模拟字符串

1.采用双for循环去模拟字符串旋转,第一个for循环,模拟字符串循环位移;第二个for循环,进行逐个字符串检测

2.使用if进行判断是否符合要求

方法2:

假设我们将goal字符串拆分为2个字符串,将其命名为R、L,我们将会得到以下式子

gogal gogal =RLRL=RsL

代码

方法1

#include <iostream>  
#include <string>  

using namespace std;

int main() 
{
    string s, goal;
    cin >> s >> goal;

    int m = s.size();
    int n = goal.size();

    // 首先检查两个字符串的长度是否相等  
    if (m != n) 
    {
        cout << "false" << endl;
        return 0;
    }

    // 遍历所有可能的循环移位  
    for (int i = 0; i < m; i++) 
    {
        bool flag = true;
        // 逐个字符比较  
        for (int j = 0; j < m; j++) 
        {
            if (s[(i + j) % m] != goal[j]) 
            {
                flag = false;
                break;
            }
        }
        // 如果找到一个匹配的循环移位,则输出 "true" 并返回  
        if (flag) 
                                                                                                                                                                                                                                                                                                                                     {
            cout << "true" << endl;
            return 0;
        }
    }

    // 如果没有找到匹配的循环移位,则输出 "false"  
    cout << "false" << endl;
    return 0;
}

方法二

#include<bits/stdc++.h>
using namespace std;

int main()
{
	string s, goal;
	cin >> s >> goal;

	if (s.length() == goal.length() && (goal + goal).find(s) != -1)
	{
		cout << "true";
	}
	else
	{
		cout << "false";
	}
	return 0;
}

  

 

posted @ 2024-06-04 18:58  山远尽成云  阅读(49)  评论(0)    收藏  举报