代码随想录第七天|LeetCode 151 344 541 卡码网54 55

541 反转字符串主要掌握快速遍历所需位置,采用i += k的步长走,而不是i += 1慢慢挪动

并且掌握python的切片操作(py的字符串不允许直接修改,我是采用先转列表再转回来,卡哥直接采用拼接的方式),贴出卡哥的代码美如画

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
            # Written in this could be more pythonic.
            s = s[:p] + s[p: p2][::-1] + s[p2:]
            p = p + 2 * k
        return s

151 翻转字符串里的单词,以下是不调用.strip()还有.split()的写法

class Solution(object):
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        s = list(s)
        self.my_reverse(s, 0, len(s) - 1)

        letter_bef = ' '
        for i in range(len(s)):
            if s[i] != ' ' and letter_bef == ' ':
                word_beg = i
            if s[i] == ' ' and letter_bef != ' ':
                word_end = i - 1
                self.my_reverse(s, word_beg, word_end)
            letter_bef = s[i]
        if letter_bef != ' ':
            self.my_reverse(s, word_beg, len(s) - 1)

        # print("\"", ''.join(s), "\"", sep='')

        # 去空格
        j = 0
        kg = 0  # 空格数
        beg = True
        for i in range(len(s)):
            if s[i] != ' ':
                beg = False
                kg = 0
                s[j] = s[i]
                j += 1
                end_ = j
            elif kg == 0 and not beg:
                s[j] = s[i]
                j += 1
                kg += 1
            else:
                continue

        # print("\"", ''.join(s[:end_]), "\"", sep='')
        return ''.join(s[:end_])

    def my_reverse(self, s, left, right):
        i = left
        for i in range(left, (left + right) // 2 + 1):
            temp = s[i]
            s[i] = s[left + right - i]
            s[left + right - i] = temp


if __name__ == '__main__':
    s = Solution()
    print("\"", s.reverseWords(s="  hello world  "), "\"", sep='')

如果要直接复制的话,注意把print中的打印引号去掉,我也是为了方便自己调试的

再看看调用api的,很夸张了这个长度对比

class Solution:
    def reverseWords(self, s: str) -> str:
        # 删除前后空白
        s = s.strip()
        # 反转整个字符串
        s = s[::-1]
        # 将字符串拆分为单词,并反转每个单词
        s = ' '.join(word[::-1] for word in s.split())
        return s

卡码网55 右旋字符串的话就刷过好几次了,总的翻转再进行内部两次局部小翻转easypeasy

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值