代码随想录算法训练营第八天| 344.反转字符串 、541. 反转字符串II、卡码网:54.替换数字、 151.翻转字符串里的单词、卡码网:55.右旋转字符串

本文介绍了Python中反转字符串的多种方法,包括使用双指针、切片操作、列表转换,以及处理ACM输入输出的实例,如单词反转和右旋转字符串。作者提到Python在某些问题上的局限性,认为对于特定算法训练可能不够理想。

题目和思路:

一、344.反转字符串 

双指针

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        l, r = 0, len(s) - 1

        while l < r:
            s[l], s[r] = s[r], s[l]
            l += 1
            r -= 1

二、541. 反转字符串II

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        length = len(s)
        res = ''
        t = length // (2 * k)
        tail = length % (2 * k)

        for i in range(t):
            res = res + s[i*2*k:i*2*k+k][::-1] + s[i*2*k+k:i*2*k+2*k]
        if tail <= k:
            res = res + s[length-tail:][::-1]
        else:
            res = res + s[length-tail:length-tail+k][::-1] + s[length - tail + k:]
        return res

由于字符串不可变,切片操作很麻烦。写代码时遇到问题有:反向切片的时候起始点也得反向,但是可以用s[a:b][::-1]代替。自己想复杂了,其实for i in range(0,length,2*k)即可。

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        s = list(s)
        for i in range(0, len(s), 2 * k):
            s[i:i + k] = reversed(s[i:i + k])
        return ''.join(s)

三、卡码网:54.替换数字

import sys

class Solution:
    def transform_string(s):
        return ''.join('number' if ord(char) - ord('0') in range(10) else char for char in s)

    def process_input():
        for line in sys.stdin:
            print(Solution.transform_string(line.strip()))

if __name__ == "__main__":
    Solution.process_input()

主要练习acm输入输出吧,python感觉这题练不了?

四:151.翻转字符串里的单词

还是练不了???

class Solution:
    def reverseWords(self, s: str) -> str:
        return ' '.join(s.split()[::-1])

五:卡码网:55.右旋转字符串

练不了一点

import sys

class Solution:
    def right_rotate_string(s, k):
        k = k % len(s)
        return s[-k:] + s[:-k]

    def process_input():
        while True:
            k_line = sys.stdin.readline()
            if not k_line:
                break
            k = int(k_line.strip())

            s = sys.stdin.readline().strip()
            if not s:
                break

            result = Solution.right_rotate_string(s, k)
            print(result)

if __name__ == "__main__":
    Solution.process_input()

今日总结:

感觉python不是很能练到今天的思路,都看了一遍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值