反转字符串中的单词:
思路:
先将字符串整体反转,再将其中的每个单词反转
代码:
类版本四:
class Solution:
def single_reverse(self,result,slow,fast):
while slow<fast:
result[fast],result[slow] = result[slow],result[fast]
slow +=1
fast -=1
def reverseWords(self, s: str) -> str:
s = list(s)
result =""
s.reverse()
fast=0
while fast <len(s):
if s[fast]!=' ':
if len(result) != 0:
result+= ' '
while fast<len(s) and s[fast]!=' ':
result += s[fast]#因为定义的是空字符串,所以没法用索引
fast+=1
else:
fast+=1
fast = 0
slow = 0
result = list(result)
while fast <= len(result):
if fast ==len(result) or result[fast]==' ':
self.single_reverse(result,slow,fast-1)
slow=fast+1
fast+=1
else:
fast+=1
return ''.join(result)
遇到的问题:
1.对于字符串单词的读取
2.字符串是无法修改的
3.对字符串添加时,可以直接使用+号添加
右旋字符串:
思路:
先反转整个字符串,再反转前k个,再反转剩下的。原因是,之前右旋的区间在最后,全部反转后,右旋的区间跑到了前面。
代码:
def fanzhuan(s,left,right):
while left < right:
s[left],s[right] = s[right],s[left]
left+=1
right-=1
k = input()
k =int(k)
s = input()
s = list(s)
length = len(s)
fanzhuan(s,0,length-1)
fanzhuan(s,0,k-1)
fanzhuan(s,k,length-1)
a = ''.join(s)
print(f"{a}")
遇到的问题:
1.对于整个思路的理解
2.join()函数不会修改列表s,而是重新生成一个新结果