LeetCode 0796.旋转字符串:暴力模拟

【LetMeFly】796.旋转字符串:暴力模拟

力扣题目链接:https://leetcode.cn/problems/rotate-string/

给定两个字符串, sgoal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true

s旋转操作 就是将 s 最左边的字符移动到最右边。

  • 例如, 若 s = 'abcde',在旋转一次之后结果就是'bcdea'

示例 1:

复制代码
输入: s = "abcde", goal = "cdeab"
输出: true

示例 2:

复制代码
输入: s = "abcde", goal = "abced"
输出: false

提示:

  • 1 <= s.length, goal.length <= 100
  • sgoal 由小写英文字母组成

解题方法:暴力模拟

如果两个字符串不等长,则直接返回false。否则(就不需要担心下标越界的问题了)假设字符串长度为 n n n:

共计进行 n n n次匹配,使用一个变量 d i f f diff diff从 0 0 0到 n − 1 n-1 n−1枚举,若存在某个 d i f f diff diff可以使得 s ( i + d i f f ) m o d    n s(i+diff)\\mod n s(i+diff)modn和 g o a l i goali goali全部相等,则返回true

否则返回false

  • 时间复杂度 O ( l e n ( s ) 2 ) O(len(s)^2) O(len(s)2)
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
cpp 复制代码
/*
 * @LastEditTime: 2026-05-03 17:22:50
 */
class Solution {
private:
    int n;

    bool ok(const string& s, const string& goal, int diff) {
        for (int i = 0; i < n; i++) {
            if (s[(i + diff) % n] != goal[i]) {
                return false;
            }
        }
        return true;
    }
public:
    bool rotateString(const string& s, const string& goal) {
        n = s.size();
        if (goal.size() != n) {
            return false;
        }
        for (int i = 0; i < n; i++) {
            if (ok(s, goal, i)) {
                return true;
            }
        }
        return false;
    }
};
cpp 复制代码
/*
 * @LastEditTime: 2022-04-07 08:13:46
 */
class Solution {
public:
    bool rotateString(string s, string goal) {
        if (s.size() != goal.size())
            return false;
        for (int i = 0; i < s.size(); i++) {
            bool same = true;
            for (int j = 0; j < s.size(); j++) {
                if (s[j] != goal[(i + j) % s.size()]) {
                    same = false;
                    break;
                }
            }
            if (same)
                return true;
        }
        return false;
    }
};

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
计算机编程-吉哥37 分钟前
脑肿瘤MRI智能识别系统:基于深度学习的像素级脑肿瘤语义分割平台【计算机毕业设计选题推荐】
人工智能·python·深度学习·算法·毕业设计·课程设计·大数据毕业设计选题推荐
用户204937554951 小时前
端侧语音部署踩坑:模型能跑不等于终端真的能用
后端·算法
shehuiyuelaiyuehao1 小时前
算法39,位运算,消失的两个数字
java·数据结构·算法
ZiLing1 小时前
2026 ROS 2 Lyrical 踩坑实录(一):编译与依赖——rosdep、现代 CMake 与 CMake 4.x
算法
Murphy_lx1 小时前
1124. 表现良好的最长时间段
c++·算法
aramae2 小时前
模拟实现strstr函数(C语言)
c语言·开发语言·算法
liliangcsdn2 小时前
因子权重矩阵处理-滞回缓冲带+降频稳定化动态重选
开发语言·python·算法
敲代码的嘎仔2 小时前
自己设计了一个兑换码算法:自增ID + Base32转码 + 按位加权签名 + 异或混淆,面试被追问细节时终于不用慌了
java·数据库·mysql·算法·微服务·面试·职场和发展
云析赢指标公式网43 小时前
文华WH6布林轨道均线强弱共振指标公式
前端·算法
luj_17684 小时前
一线一区一变破解人盯人防守密码
开发语言·网络·c++·经验分享·算法