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

101 阅读2分钟

前言:剑指offer刷题系列

问题:

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

示例:

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

思路:

这个函数我使用了一个巧妙的办法实现字符串的左转操作,就是新声明一个列表,将原字符串复制两份到新列表中中,再对应输出n,n+len(s)就可以啦。

  • 首先,定义一个空列表newString,用来存储旋转后的字符串。
  • 然后,用一个for循环遍历原字符串s的每个字符,用range(len(s))函数生成从0到len(s)-1的索引序列,用i表示每个索引。在循环体中,用newString.append(s[i])方法将s中的每个字符添加到newString的末尾。
  • 接着,用另一个for循环重复上述操作,再次将s中的每个字符添加到newString的末尾。这样,newString就变成了s和s拼接起来的结果,长度是2*len(s)。
  • 最后,用return语句返回newString的一部分作为结果。这一部分是从索引n开始,到索引n+len(s)结束(不包括)的子列表。用冒号分隔起始和结束索引表示切片操作。然后用".join()"方法将这个子列表转换为一个字符串,并返回左旋后的字符串。

基于上述思考,代码如下:

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        newString = []
        for i in range(len(s)): # 用range()函数生成索引序列
            newString.append(s[i]) # 用append()方法添加元素
        for i in range(len(s)):
            newString.append(s[i])
        return "".join(newString[n:n+len(s)]) # 用join()方法将列表转换为字符串

执行结果如下图:

image-20230727185220961.png

学到的知识点:

开始用python写题了。

  • range()函数是生成一个索引序列。range(a,b):生成索引,从a到b;range(a):生成索引从0到a。
  • for()循环遍历一个字符串或一个列表。用for i in 序列
  • append()方法向一个列表添加元素,何用切片操作访问或修改列表中的部分元素。
  • join()方法将一个列表转换为一个字符。