代码随想录打卡(8) —— 字符串

力扣344.反转字符串 

要求复杂度为O(1),所以反转方法为本体考点。能想到用双指针思路后,代码编写很简单。 注意不论奇偶长度数组,循环都可以在length//2的位置截至。

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        # 双指针模拟交换过程
        length = len(s)
        left = 0
        right = length - 1
        while left < length // 2:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1

力扣541.反转字符串Ⅱ

非常巧妙的指针,使得代码看起来非常简洁。主要理清第一次循环时指针的位置,比较容易理解。

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        # Two pointers. Another is inside the loop.
        p = 0
        while p < len(s):
            p2 = p + k # 指针移动k
            # Written in this could be more pythonic.
            s = s[:p] + s[p: p2][::-1] + s[p2:] # 第一轮p:p2对应前k个元素,且只反转前k个
            p = p + 2 * k
        return s

剑指 Offer 05. 替换空格

调用库函数暴力法外,为了减少空间,首先扩充数组到每个空格替换成"%20"之后的大小,

然后从后向前替换空格,也就是双指针法。详见代码随想录

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

力扣151.反转字符串中的单词

得益于python函数。 否则,思路为,先删除多余的单词间空格,然后颠倒每个单词,再反转整个字符串

class Solution:
    def reverseWords(self, s: str) -> str:
        # method 1 - Rude but work & efficient method.
        s_list = [i for i in s.split(" ") if len(i) > 0] # 提取单词(split后转list格式)
        return " ".join(s_list[::-1]) # join后转化为字符串形式

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

切片很easy

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        return s[n:] + s[:n] # 注意左闭右开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值