344.反转字符串
文档讲解:代码随想录
class Solution:
def reverseString(self, s: List[str]) -> None:
#首尾两两交换即可
head = 0
tail = len(s)-1
while head < tail:#奇数偶数都可以这样判断,奇数停止交换的时刻就是head=tial,偶数停止交换的时刻就是head>tail
s[head],s[tail] = s[tail],s[head]
head = head + 1
tail = tail -1
return s
541. 反转字符串II
文档讲解:代码随想录
题目
给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样
分析
题目中经常用到的一个功能就是反转字符串,所以我们先写一个函数来封装这一个功能
在Python中使用切片语法s[i:i+k]
来获取列表、数组或字符串的一部分时,如果在指定的切片中剩余的元素不足k个,Python不会报错。它将简单地返回从索引i开始直到列表末尾的所有元素,即使这些元素的数量少于k个。
其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。因为要找的也就是每2 * k 区间的起点,这样写,程序会高效很多。
所以当需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章。
class Solution:
def reverseStr(self, s: str, k: int) -> str:
def reverse(strlist):
#反转字符串和上一个题的做法一样
head = 0
tail = len(strlist)-1
while head < tail:
strlist[head],strlist[tail] = strlist[tail],strlist[head]
head = head + 1
tail = tail -1
return strlist
s = list(s)
#每计数至 2k 个字符,2k个字符的起始
#这种写法包含了题目中所说的另外两种情况
for i in range(0,len(s),2*k):
#就反转这 2k 字符中的前 k 个字符
s[i:i+k] = reverse(s[i:i+k])
return "".join(s)
卡码网54. 替换数字
文档讲解:代码随想录
class Solution:
def change(self, s):
s = list(s)
for i in range(len(s)):
#检查一个字符是数字还是字母,如果是数字就更换
if s[i].isdigit():
s[i] = 'number'
return ''.join(s)
151.翻转字符串里的单词
文档讲解:代码随想录
倒序遍历字符串 s ,记录单词左右索引边界 i , j 。
每确定一个单词的边界,则将其添加至单词列表 resresres 。
最终,将单词列表拼接为字符串,并返回即可
来源:力扣大佬 链接:https://leetcode.cn/problems/reverse-words-in-a-string/solutions/2361551/151-fan-zhuan-zi-fu-chuan-zhong-de-dan-c-yb1r/
class Solution:
def reverseWords(self, s: str) -> str:
s = list(s)
i= len(s)-1
j = len(s)-1
res = []
while i >=0:
if s[i] == ' ': #跳过空格
i = i -1
else:
j = i #单词的末尾索引
while i >=0 and s[i] != ' ': #去找单词的首索引
i = i - 1
# print(' '.join(s[i+1:j+1]))
res.append(''.join(s[i+1:j+1])) #添加单词到res中
return ' '.join(res)
卡码网:55.右旋转字符串
文档讲解:代码随想录
先整体翻转,再对每部分进行翻转
def right_rotate(k, s):
#定义翻转函数
s = list(s)
# print(s)
def reverse(lists):
left = 0
right = len(lists)-1
while left<right:
lists[left],lists[right] = lists[right],lists[left]
left = left + 1
right = right -1
return lists
#先整体翻转
reversed_s = reverse(list(s))
#对两个部分分别翻转
reversed_s[0:k] = reverse(reversed_s[0:k])
reversed_s[k:len(reversed_s)] = reverse(reversed_s[k:len(reversed_s)])
return ''.join(reversed_s)
# # 读取输入
k = int(input())
s = input()
# # 调用函数进行右旋转并输出结果
result = right_rotate(k, s)
print(result)