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

python切片用法

通过切片,我们可以轻松地获取序列中的一部分元素,对其进行操作或重新排列。基本语法为:

sequence[start:stop:step]

常见切片用法有:
获取一部分元素

my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
part1 = my_list[1:3] # [1, 2]
part2 = my_list[4:7] # [4, 5, 6]
part1 = my_list[:3] # [0, 1, 2]
part2 = my_list[4:] # [4, 5, 6, 7, 8, 9]
#通过负索引
part1 = my_list[-3:-1] # [7, 8]
part2 = my_list[3:-3] # [3, 4, 5, 6]
#指定步长
part1 = my_list[0:10:2] # [0, 2, 4, 6, 8]
part2 = my_list[1:10:3] # [1, 4, 7]

逆序输出

reverse_s = s[::-1] 

541. 反转字符串II(easy)

力扣链接
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

思路

模拟即可,但也有小技巧。没必要让步长为1然后弄个计数器判断是否到了2k,直接让步长为2k即可
此处用了切片逆序方法

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        i = 0
        while i < len(s):
            j = i + k
            s = s[:i] + s[i: j][::-1] + s[j:]
            i = i + 2 * k
        return s

也可以用reversed方法,但要切记他返回的是一个迭代器,需要join

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        i = 0
        while i < len(s):
            j = i + k
            substr = ''.join(reversed(s[i: j]))
            s = s[:i] + substr + s[j:]
            i = i + 2 * k
        return s

卡码网:54.替换数字

卡码链接
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。

思路

创建一个空字符串,遍历输入,当遇到数字时往新字符串中添加“number”,否则直接添加原字符串中的元素。

str = input()
newstr = ''
for i in str:
    if i <= '9' and i>='0':
        newstr += "number"
    else:
        newstr += i
print(newstr)

在其他语言中,可以通过直接修改字符串来节省空间。但python中的字符串是不可修改的

151.反转字符串中的单词(normal)

给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

思路

由于有重复空格,所以在将字符串拆分为数组之后,首先要进行去空格操作。然后建立一个栈就好了。

class Solution:
    def reverseWords(self, s: str) -> str:
        # 移除多余的空格
        words = s.split()
        for word in words:
            if word == ' ':
                words.remove(word)
        # 正式开始翻转
        res = ''
        for i in range(len(words)):
            res += words.pop()
            if words != []:
                res += ' '
        return res

卡码网 55. 右旋字符串

卡码链接
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。
例如,对于输入字符串 “abcdefg” 和整数 2,函数应该将其转换为 “fgabcde”。

思路

直接按照k切分字符串,创建一个新字符串将他们拼起来

k = int(input())
s = input()

length = len(s)
substr1 = s[:length-k]
substr2 = s[length-k:]
print(substr2 + substr1)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值