剑指 Offer 58 - II. 左旋转字符串

116 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

剑指 Offer 58 - II. 左旋转字符串

一、题目描述:

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:

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

输出: "cdefgab"

示例 2:

输入: s = "lrloseumgh", k = 6

输出: "umghlrlose"

限制:

1 <= k < s.length <= 10000

来源:力扣(LeetCode) 链接:leetcode.cn/problems/zu… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

这部分可以写写:

  1. 这道题考察了什么思想?你的思路是什么?

    这道题目用Python做就比较容易,我们可以利用字符串切片来做,如果字符串str是abcdefg,那么str[2:]就是cdefg,而str[:2]就是ab,我们将字符串进行切片,然后再连接在一起即可。

    我们可以建立一个列表,将字符串后面的数字先填充到列表,然后再把字符串前面的数字填充到列表。然后转换为字符串即可。

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    是一次通过的,用Python操作字符串还是十分方便的!

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    利用求余运算可以简化代码!

     class Solution:
         def reverseLeftWords(self, s: str, n: int) -> str:
             res = ""
             for i in range(n, n + len(s)):
                 res += s[i % len(s)]
             return res
     ​
     作者:jyd
     链接:https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/mian-shi-ti-58-ii-zuo-xuan-zhuan-zi-fu-chuan-qie-p/
     来源:力扣(LeetCode)
     著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

image.png

 class Solution {
 public:
     string reverseLeftWords(string s, int n) {
         /* 反转n前面的字符串 */
         reverse(s.begin(), s.begin() + n);
         /* 反转n后面的字符串 */
         reverse(s.begin() + n, s.end());
         /* 反转整个字符串 */
         reverse(s.begin(), s.end());
 ​
         return s;
     }
 };
 ​
 作者:Nehzil
 链接:https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/jian-zhi-offer-58-ii-zuo-xuan-zhuan-zi-f-xxke/
 来源:力扣(LeetCode)
 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

三、AC 代码:

 class Solution:
     def reverseLeftWords(self, s: str, n: int) -> str:
         return s[n:] + s[:n]
 class Solution:
     def reverseLeftWords(self, s: str, n: int) -> str:
         strlist = []
         for i in range(n, len(s)):
             strlist.append(s[i])
         for i in range(n):
             strlist.append(s[i])
         return ''.join(strlist)

四、总结:

如果你还有更多的思考、分析、总结,通通都加上来吧~

剑指 Offer 58 - II. 左旋转字符串

这道题目也是一道十分简单的题目,在C语言我们也可以考虑使用strncpy来处理字符串的一些操作。

 char* reverseLeftWords(char* s, int n){
     int len = strlen(s);
     if (n > len)
     {
         n %= len;
     }
     char *ret = (char*)malloc(sizeof(char)*(len+1));
     strncpy(ret,s + n,len-n);
     strncpy(ret+len-n,s,n);
     ret[len] = '\0';
     return ret;
 }
 ​

这里是小伞,一个热爱生活的程序员,欢迎关注我!