LeetCode:344.反转字符串,541. 反转字符串II,剑指Offer 05.替换空格

344.反转字符串

class Solution:
    def reverseString(self, s: List[str]) -> None:
        left =  0
        right = len(s) - 1

        while left < right:
            s[left],  s[right] = s[right], s[left] # 
            left += 1
            right -= 1
        return s

Python的语法支持使用“序列解包”(Sequence Unpacking)的方式同时交换多个变量的值。

在a, b = b, a这个语句中,等号右边的表达式b, a是一个元组,它包含了两个值,分别是s[right]和s[left]。等号左边的a, b也是一个元组,它包含了两个变量,分别是s[left]和s[right]。Python会自动地将等号右边的元组中的值按顺序解包并赋值给等号左边的元组中的变量,从而实现了两个变量的值的交换。

541. 反转字符串II

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        # 定义翻转函数
        def reverseString(text):
            left, right = 0, len(text) - 1
            while left < right:
                text[left], text[right] = text[right], text[left]
                left += 1
                right -= 1
            return text
        # 将string先转换为list
        res = list(s)
        # 循环下标,步长为2*k
        for cur in range(0, len(s) - 1, 2 * k):
            res[cur: cur + k] = reverseString(res[cur: cur + k])
        # list再转化为string
        return ''.join(res)

剑指Offer 05.替换空格

class Solution:
    def replaceSpace(self, s: str) -> str:

        n = len(s)
        for key, value in enumerate(s[::-1]):
            if value == ' ':
                # 空格前的字符串 + %20 + 空格前的字符串
                s = s[:n - (key + 1)] + '%20' + s[n - key:]
        return s

暴力法

class Solution:
    def replaceSpace(self, s: str) -> str:
        return "%20".join(s.split(" "))

151.翻转字符串里的单词

快慢指针法

class Solution:
    def reverseWords(self, s: str) -> str:

        # 删除开头和结尾的空格
        def trim_space(s):
            p = 0
            # p 循环倒非空格就停止
            while p < len(s) and s[p] == ' ':
                p += 1
            return s[p:]
        s = trim_space(s)
        s = trim_space(s[::-1])[::-1]

        # 快慢指针 翻转单词
        ps, pf = 0, 0
        s = s[::-1] # 先翻转整个字符串
        while pf < len(s): # 快指针要遍历完字符串
            # 快指针遍历字符串,遇到空格先剔除,然后翻转空格之前的单词
            if s[pf] == ' ':
                # 如果单词之间有多个空格,删除多余的空格
                if s[pf] == s[pf + 1]:
                    s = s[:pf] + s[pf + 1:]
                    continue
                # 翻转每个空格之间的单词
                else:
                    s = s[:ps] + s[ps:pf][::-1] + s[pf:]
                    # 慢指针指向快指针的下一个位置
                    ps = pf + 1
                    # 快指针要跳过空格的位置
                    pf = pf + 2
            else:
                pf += 1
        # 慢指针会停留在最后一个单词之前,因为以空格做分割,需要对最后一个单词做翻转
        return s[:ps] + s[ps:][::-1]

python内置函数

class Solution:
    def reverseWords(self, s: str) -> str:
        # 去除空格,同时将str转为list
        s_list = [i for i in s.split(" ") if len(i) > 0]
        # 倒序输出
        return " ".join(s_list[::-1])

剑指Offer58-II.左旋转字符串

切片

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        return s[n:] + s[:n]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容