字符串,你朝左给我旋儿一个!

简介: 字符串,你朝左给我旋儿一个!

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

640.jpg

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


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

640.png




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



题意


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


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


示例


输入:s = "abcdefg", k = 2

输出:"cdefgab"


提示


1 <= k < s.length <= 10000


题目解析


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


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


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


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


这个过程维护一个列表。


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


图解


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

640.png

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

640.png


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

640.png


本题的解题方法从左至右遍历整个字符串,所以时间复杂度为 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();
    }
}

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


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


640.jpg


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


我是帅蛋,我们下次见。

相关文章
|
2月前
|
C语言
C语言--左旋字符/右旋字符实现及其判断
C语言--左旋字符/右旋字符实现及其判断
23 0
|
2月前
字符串括号匹配
字符串括号匹配
|
9月前
|
索引
【LeetCode】917. 仅仅反转字母、387. 字符串中的第一个唯一字符
目录 917. 仅仅反转字母 387. 字符串中的第一个唯一字符
30 0
|
2月前
|
算法 测试技术 C#
【字符串】【括号匹配】【广度优先】301. 删除无效的括号
【字符串】【括号匹配】【广度优先】301. 删除无效的括号
【字符串】【括号匹配】【广度优先】301. 删除无效的括号
|
2月前
L1-050 倒数第N个字符串
L1-050 倒数第N个字符串
17 0
|
11月前
字符串左旋
字符串左旋
35 0
字符串左旋
|
2月前
|
C++ 索引
字符串中的第一个唯一字符(C++)
字符串中的第一个唯一字符(C++)
39 0
每日一题——左旋转的字符串
每日一题——左旋转的字符串
|
测试技术
字符串转二叉树
字符串转二叉树
86 0
字符串转二叉树