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

每天题真的太多了……怪不得比我自刷走得快呢……好多事再加上要刷题,完全一个忙不过来

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

541. 反转字符串II

字符串处理的时候,为了方便索引,经常转化为列表后使用(每个字母一个元素)。那么在输出的时候直接转str是无法把各个字母再合并的,就需要用 join函数 来输出了。同样可以用于以某特定间隔符一次输出列表元素。语法:

'分隔符'.join(list_name)

还有两个和MATLAB语法不同的地方

①等差数列的取法,是先写开头结尾,最后一个数放间隔

语法:range(start,end,间隔),间隔放在最后写

相同的还有列表的索引:listA[::间隔],这里默认start=开头,end=结尾,如果end<0,那么默认start=结尾,end=开头

②数组/列表的切片操作:

在Python中,对于切片操作,如果切片范围超出了列表的长度,Python不会抛出索引超出范围的错误。相反,它会尽可能地切片,只包括列表中存在的元素,并且不会引发异常。

也就是说,每次输出k个数,最后一次操作时,如果没有k个数了,不会报错索引溢出,而是直接把最后所有的元素输出。

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        def reverse_only(s_part):#实现输入字符串的反转
            left = 0
            right = len(s_part)-1
            while left<right:
                s_part[left],s_part[right] = s_part[right],s_part[left]
                left += 1
                right -= 1
            return s_part

        s_list = list(s)#方便用下标索引
        n_s = len(s_list)

        for cur in range(0,n_s,2*k):#注意Python的等差数列取法语法和MATLAB不一样
            s_list[cur:cur+k] = reverse_only(s_list[cur:cur+k])#每次只输入需要反转的k个字符

        return ''.join(s_list)

卡码网:54.替换数字

对Python好像没什么难的……直接赋值就完了,但是必须要使用下标索引,别犯傻!

def change_num(s):
    s_list = list(s)
    for i in range(len(s_list)):
        if s_list[i].isdigit():
            s_list[i] = 'number'
            
    return ''.join(s_list)
    
s = str(input())
output_s = change_num(s)
print(output_s)

复习一个ACM,好久没写ACM格式了

151.翻转字符串里的单词

只能说刚用split写完,就看见卡哥说不让用split……

顺便复习一下:strip是删除开头和结尾的某字符,split是以某字符分割为若干个子字符

class Solution:
    def reverseWords(self, s: str) -> str:
        s_list = s.split()
        size = len(s_list)-1
        left = 0
        right = size
        while left<right:
            s_list[left],s_list[right] = s_list[right],s_list[left]
            left += 1
            right -= 1

        return ' '.join(s_list)

?但是看不懂卡哥和我代码的区别,就这样吧,二刷再来解决

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

def rightchange(s,k):
    s_list = list(s)
    len_s = len(s_list)
    part1 = s[:len_s-k]#注意Python是不包括写出来的这个末尾的值的!
    part2 = s[len_s-k:]#后k个字符
    s_list = [part2,part1]
    
    return ''.join(s_list)
    
k = int(input())
s = str(input())
output = rightchange(s,k)
print(output)

注意Python的切片,如果把最后一个元素的位置写出来,那么是不包括这个元素的!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值