思路
- 遍历字符串时,让i+2*k,然后判断是否有需要反转的区间,反转区间在[i,i+k]
法一:用单独的反转函数
体现了剩余字符小于k和剩余字符小于2k但大于或等于k的情况
class Solution:
def reverseStr(self, s: str, k: int) -> str:
res=list(s)
for i in range(0,len(s),2*k):
#剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样
if i+k < len(s):
res[i:i+k]=self.subStringReverse(res[i:i+k])
continue
#剩余字符少于 k 个,则将剩余字符全部反转
res[i:len(s)]=self.subStringReverse(res[i:len(s)])
return ''.join(res)
def subStringReverse(self,s):
start=0
end=len(s)-1
while start < end:
s[start],s[end]=s[end],s[start]
start+=1
end-=1
return s
法二:利用切片+拼接
循环条件:start<数组长度,start每次+2k
反转用s[::-1]
利用字符串特性:字符串末尾如果超过最大长度,则会返回至字符串最后一个值,这个特性可以避免一些边界条件的处理。在本题中对应,剩余字符小于k,反转剩下的全部字符。因此,不用再区分剩余字符是否小于k、剩余字符大于等于k但小于2k。
class Solution:
def reverseStr(self, s: str, k: int) -> str:
start=0
n=len(s)
#start+2k小于字符长度,表明剩余字符小于2k但大于等于k
while start < n:
#前移k个字符
end=start+k
#字符串切片后拼接,在start:end区间反转
s=s[:start]+s[start:end][::-1]+s[end:]
start=start+(2*k)
return s
反转字符串高效算法:Python实现及两种方法对比
本文探讨了如何使用Python实现字符串反转,提供了两种方法:一是通过独立的反转函数区分不同情况;二是利用切片和拼接技巧简化处理。两种方法分别展示了处理剩余字符少于k和大于等于k但小于2k的情况。
8082

被折叠的 条评论
为什么被折叠?



