2022-12-14Day8 | 344.反转字符串| 541. 反转字符串II| 05.替换空格| 151.翻转字符串里的单词 |58-II.左旋转字符串

344.反转字符串

题目链接:

344. 反转字符串 - 力扣(Leetcode)
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

image.png

在学之前,感觉只会切片的操作。不断练习,渐渐积累了双指针的应用。

完整代码:

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        n = len(s)
        L = 0
        R = n-1
        while L < n//2:
            s[L],s[R] = s[R],s[L]
            L +=1
            R -=1

541. 反转字符串II

题目链接:

541. 反转字符串 II - 力扣(Leetcode)
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

收获的点:

  1. 循环增加的2k个长度,for i in range(0,len(nums),2*k):
  2. ''.join(s) 列表变字符串
class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        n = len(s)
        def f1(s):
            s = s[:][::-1]
            return s 
        s = list(s)
        for i in range(0,n,2*k):
            s[i:i+k] = f1(s[i:i+k])
        return ''.join(s)

05.替换空格

题目链接:剑指 Offer 05. 替换空格 - 力扣(Leetcode)

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

收获的点:

1)对于线性数据结构,填充或者删除,后序处理会高效的多。很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。
2)从后往前插入一开始想不到,希望通过这道题有所积累。有尝试从前往后插入,但是总是会被覆盖,可能没有扩容和移动(待解决)。

class Solution:
    def replaceSpace(self, s: str) -> str:
        n = len(s)
        for i,e in enumerate(s[::-1]):
            if e == ' ':
                s = s[:n-(i+1)] + '%20'+s[n-i:]
        return s 

151.翻转字符串里的单词

题目链接:

151. 反转字符串中的单词 - 力扣(Leetcode)

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

python的split函数、join函数

完整代码:

class Solution:
    def reverseWords(self, s: str) -> str:
        s_list = [i for i in s.split(' ') if len(i)>0]
        return ' '.join(s_list[::-1])
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容