【实战】ACM 选手图解 LeetCode 左旋转字符串

本文介绍如何实现字符串的左旋转操作,通过一个简单的例子展示解题思路,包括Python和Java两种代码实现。文章强调理解题意和自实现字符串操作的重要性,指出时间复杂度为O(n),并提醒读者注意不同编程语言的空间复杂度差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好呀,我是喜欢旋儿一个的蛋蛋。

d6c984b657c65212a57a05c07568663

今天来搞左旋转字符串,光看题目觉的可能是道挺狠的题。

其实就是纸老虎,不禁打,直接搞起!

8ae2fe011263ff1920fad8d01440e43

剑指 Offer-Ⅱ:左旋转字符串

题意

实现一个字符串左旋转操作。

左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。

示例

输入:s = “abcdefg”, k = 2
输出:“cdefgab”

提示

1 <= k < s.length <= 10000

题目解析

水题,难度简单,其实看懂题就会了。

所有的代码尽量都是自己写的,不要用编程语言自带的库函数。

还是想重复,对于字符串这部分,前期刷题所有的操作最好都是自己老老实实实现的。

再回到这道理,其实就是遍历列表,拆开,然后重新拼接的过程

这个过程维护一个列表。

  • 先将 k+1 到末尾的字符添加到列表中。
  • 再将 0 到 k 的字符添加到列表中。

图解

在这以 s = “abcdefg”, k = 2 为例,首先初始化一个列表:

41c0bf17699369224151d69e001c1e5

此例 k = 2,那根据题目解析中说的,先将 k+1 到末尾的添加到 res 中。

e5f06bf3798b970f7ee5c680a3cb05f

之后将 0 至 k-1 的字符添加至末尾。

63fbf4e64d05702884fb40204db8701

本题的解题方法从左至右遍历整个字符串,所以时间复杂度为 O(n)

时间复杂度还是按照你用的编程语言来算,如果字符串可修改的编程语言,比如 Python、Java,需要维护一个新的列表,这个的空间复杂度为 O(n),像可原地修改字符串的编程语言,比如 C++,这样的空间复杂度为 O(1)

代码实现

Python 代码实现

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        # python 字符串不可修改,所以维护一个列表
        res = []

        # 首先添加 n+1 到 len(s) 的元素
        for i in range(n, len(s)):
            res.append(s[i])

        # 再添加 0 到 n 的元素
        for i in range(n):
            res.append(s[i])

        return ''.join(res)

Java 代码实现

class Solution {
    public String reverseLeftWords(String s, int n) {
        StringBuilder res = new StringBuilder();
        for(int i = n; i < s.length(); i++)
            res.append(s.charAt(i));
        for(int i = 0; i < n; i++)
            res.append(s.charAt(i));
        return res.toString();
    }
}

好啦,图解左旋转字符串到这就结束辣。

你看像这种看起来花里胡哨的题目,完全不用慌,都是小猫咪。

6bff714c82164c0de16f115b23d7062

最后记得帮我点赞呀,么么哒。

我是帅蛋,我们下次见。


推荐阅读 👍:ACM 选手带你玩转时间复杂度和空间复杂度

推荐阅读 👍:ACM 选手带你玩转字符串

推荐阅读 👍:ACM 选手图解 LeetCode 反转字符串

推荐阅读 👍:ACM 选手图解 LeetCode 反转字符串Ⅱ

推荐阅读 👍:ACM 选手图解 LeetCode 替换空格

推荐阅读 👍:ACM 选手图解 LeetCode 反转字符串中的单词

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值