代码随想录day7 ● 344.反转字符串● 541. 反转字符串II● 卡码网:54.替换数字● 151.翻转字符串里的单词● 卡码网:55.右旋转字符串

● 344.反转字符串

题目链接:344. 反转字符串 - 力扣(LeetCode)

思路:我们用双指针 用ch来储存其中一个元素  left在左边 right在右边 用while left<right来遍历 每一次都让指针两边的元素倒转即可

下面是代码

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
        return s

(这里不用return s)

● 541. 反转字符串II

题目链接:541. 反转字符串 II - 力扣(LeetCode)

做题思路:这个题与上面这个题很类似,但是我们需要理清楚

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

是什么意思 比如我们的步子一步是跨2k 但是在地上只留下了k的印记 当剩余的路小于k的时候我们一步就到了终点 但是印记比剩余的路大 所以就是剩余字符全部反转 可是如果剩余的路小于2k大于k 虽然我们一步迈过去了 但是留在地上的印记只有k 于是根据描述就可以写出下面的代码

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

● 卡码网:54.替换数字

题目链接:题目页面 (kamacoder.com)

思路:python有isdigit()函数可以判断是否是数字 所以直接用for遍历即可

下面是代码

s = list(s)
for i in range(len(s)):
    if s[i].isdigit():
        s[i] = 'number'
return ''.join(s)

● 151.翻转字符串里的单词

题目链接:151. 反转字符串中的单词 - 力扣(LeetCode)

(因为有些办法在文章的上文中已经提到了 比如第一题的反转 而用reverse也可以实现相同的效果 于是我们直接采用reverse)

思路:这个题需要把字符串转换成列表 并且把里面所有的空格都去掉 然后用reverse反转后我们直接用return' '. join(s)来实现转换到字符串并且加上空格

下面是代码

class Solution:
    def reverseWords(self, s: str) -> str:
        s = s.split() 
        s = [s.strip() for s in s]
        s.reverse()
        return ' '.join(s)

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

题目链接:题目页面 (kamacoder.com)

思路:我们用双指针法 left是左 right是又 给left与right设置一个范围 然后用第一个题的办法交换就可以了 下面是代码

s=list(s)
left=0
right=len(s)-1
while left<=k-1 and right<=len(s)-k:
    ch = s[left]
    s[left]=s[right]
    s[right]=ch
    return ''.join(s)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值