代码随想录算法训练营第八天|344.反转字符串、541. 反转字符串II、541. 反转字符串II

浅记录一下,我今天开始改为python了。。。

1.344.反转字符串

题目链接:反转字符串
文档讲解: 代码随想录

版本一:使用双指针

class Solution(object):
    def reverseString(self, s):
        """
        :type s: List[str]
        :rtype: None Do not return anything, modify s in-place instead.
        """

        left, right = 0, len(s) - 1

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

版本二:使用栈

        stack = []
        for char in s:
            stack.append(char)
        for i in range(len(s)):
            s[i] = stack.pop()

版本三:使用range

        n = len(s)
        for i in range(n // 2):
            s[i], s[n - i - 1] = s[n - i - 1], s[i]

版本四:使用reversed

s[:] = reversed(s)

版本五:使用切片

s[:] = s[::-1]

版本六:列表推导

s[:] = [s[i] for i in range(len(s) - 1, -1, -1)]

版本七:使用reverse()

s.reverse()

2.541. 反转字符串II

题目链接:反转字符串II
文档讲解: 代码随想录

思路:当需要固定规律一段一段去处理字符串的时候,要想想在for循环的表达式上做文章。在遍历字符串的时候,让cur每次移动 2*k 就行,然后判断需要反转的区间。

class Solution(object):
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """

        def reverse_substr(text):
            left, right = 0, len(text) - 1
            while left < right:
                text[left], text[right] =  text[right], text[left]
                left += 1
                right -= 1
            return text

        res = list(s)

        for cur in range(0, len(s), 2 * k):
            res[cur: cur + k] = reverse_substr(res[cur: cur + k])
        
        return ''.join(res)

Python3 (v2):

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

3.替换数字

题目链接:替换数字
文档讲解: 代码随想录

错误:不能直接在循环中修改 i,因为在这种情况下 i 是一个临时变量,修改它并不会改变 lst 中的对应元素

 if i <= '9' and i >= '0':
      i = 'number'
class Solution:
    def change(self, s):
        lst = list(s)
        for i in range(len(lst)):
            if lst[i].isdigit:
                lst[i] = "number"
        return ''.join(lst)

卡码网光写出这部分会一直显示答案错误,我看评论多了函数的调用,我试了一下还是不行,之中再看那个格式吧。


2024.6.29
看了今天的答案,卡码网是要有输入输出的,可以通过的版本如下:

s = input()

lst = list(s)

for i in range(len(s)):
    if lst[i].isdigit():
        lst[i] = 'number'
print(''.join(lst))
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值