leetcode原题 字符串轮转

题目:

字符串轮转。给定两个字符串s1s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottleerbottlewat旋转后的字符串)。

注意:这里是轮转,不是翻转,字符串只是将一部分子串转移到了原字符串的后面

输入:s1 = "waterbottle", s2 = "erbottlewat"

输出:True

解题思路:

方法一:找关系

1.首先,如果两个字符串不相等,那么一定不是轮转的

2.如果s2是s1的轮转,那么s2j=s1(i+j)%n,其中i就表示,从下标为i的元素后开始轮转的,

所以只需要固定i,每个i都遍历一遍s2,如果s2的每个字符都满足s2j=s1(i+j)%n,则说明是轮转的,如果所有的i都试了一遍,发现s2的字符都不能满足,则说明不是轮转的

源代码如下:

cpp 复制代码
class Solution {
public:
    bool isFlipedString(string s1, string s2) {
        int n=s1.size();
        int m=s2.size();
        if(n!=m) return false;
        if(m==0) return true;
        for(int i=0;i<n;i++)
        {
            bool flag=true;
            for(int j=0;j<m;j++)
            {
                if(s1[(i+j)%n]!=s2[j])
                {
                    flag=false;
                    break;
                }
            }
            //s2遍历完了,flag依旧为true,说明s2中每个字符都满足,所以已经找到了轮转的位置,直接返回true
            if(flag)
            {
                return true;
            }
        } 
        return false;
    }
};

方法二:搜索子字符串

如果s2是s1轮转过来的,那么在s1+s1这个字符串中一定可以完整的找到s2

源代码如下:

cpp 复制代码
class Solution {
public:
    bool isFlipedString(string s1, string s2) {
        //find()返回值为-1时,说明在字符串中找不到s2
        return s1.size()==s2.size()&&(s1+s1).find(s2)!=-1;
    }
};
相关推荐
hanlin031 分钟前
刷题笔记:力扣第169题-多数元素
笔记·算法·leetcode
张小姐的猫2 分钟前
【AI大模型接入SDK】 —— Ollama本地接入Deepseek
java·linux·开发语言·网络·c++·人工智能
hfywmsj7 分钟前
广州餐饮铺位招租数据建模:基于多维评估体系的选址算法设计与实现
人工智能·算法·广州餐饮铺位招租
wabs66616 分钟前
关于二叉树【力扣116.填充每个节点的下一个右侧节点指针的思考】
数据结构·c++·算法·leetcode·二叉树·层序遍历
Nil20829 分钟前
leetcode 74搜索二维矩阵
算法·leetcode·矩阵
新知图书37 分钟前
第 14 章 后训练算法GRPO详解与实战
人工智能·算法
shirsl3 小时前
算法 Day1-数组 / 哈希 + 双指针
python·算法·哈希算法
David猪大卫9 小时前
【C++修炼】智能指针使用及原理
开发语言·c++·经验分享·笔记·学习·考研·面试
2601_9677607810 小时前
2026年PDF压缩与页码添加工具技术实测:性能、算法与本地化适配深度对比
算法·pdf
零衣贰10 小时前
The 2026 ICPC Asia East Continent Online Contest (I) 题解
c++·icpc