代码随想录算法训练营第七天| 344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串

文档讲解:代码随想录

视频讲解:代码随想录B站账号

状态:看了视频题解和文章解析后做出来了

344.反转字符串

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

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

思路:本题比较简单,使用双指针一个指向第一位一个指向最后一位。交换他们的值,然后分别向内缩进一位。终止条件为left < right,当列表长度为偶数时,正好可以翻转所有值,当列表长度为奇数时,正好留着中间那个值不做处理。

541. 反转字符串II

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] = self.reverseString(s[i:i+k], k)
        return ''.join(s)

    def reverseString(self, s: str, k: int) -> str:
        left, right = 0, len(s) - 1
        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1
        return s

思路:首先把上一题的翻转字符串的逻辑包装成一个函数。遍历此题的字符串,step_size = 2*k,然后处理当前位置与当前位置+k之间的字符串即可。

剑指Offer 05.替换空格

class Solution:
    def pathEncryption(self, path: str) -> str:
        res = ""

        for i in range(len(path)):
            if path[i] == ".":
                res = res + " "
            else:
                res = res + path[i]

        return res

 思路:遍历path,如果等于“.”就直接把空格加进去,其余情况把当前元素加进去。

class Solution:
    def pathEncryption(self, path: str) -> str:
        return path.replace(".", " ")

  当然也可以直接调取replace函数。

151.翻转字符串里的单词

class Solution:
    def reverseWords(self, s: str) -> str:
        words = s.split()

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

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

        return " ".join(words)

思路:python这题相对简单,因为split()直接会把多个空格当成一个tab符号,所以直接split就能分割出所有有效字符串。

然后使用双指针交换头尾的字符即可。

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

class Solution:
    def dynamicPassword(self, password: str, target: int) -> str:
        return password[target:] + password[:target]

思路:用string slicing。

class Solution:
    def dynamicPassword(self, password: str, target: int) -> str:
        result = list(password) + [' '] * target
        for i in range(target):
            result[i], result[len(password) + i] = result[len(password) + i], result[i]

        return ''.join(result).strip()

思路:将password变成列表,在后面加上等同于target数量的空格,将前target位与后target位交换,然后返回strip后的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值