题目:给定一个字符类型的数组chas,请在单词间做逆序调整,只要做到单词顺序逆序即可,对空格的位置没有特别要求。例如把chas看成字符串为“I love you”,调整成“you love I”。
补充题目:给定一个字符类型的数组chas和一个整数size,请把大小为size的左半区整体移到右半区,右半区整体移到左边。例如,如果把chas看作字符串“ABCDE”,size = 3,调整成“DEABC”。
基本思路:
原问题: 首先对整个数组逆序,然后遍历数组找到每一个单词,将每个单词里的字符进行逆序即可
补充问题: 先把chas[0…size-1]部分逆序,再把chas[size…N-1]部分逆序,最后再将整体逆序即可。
要求:如果字符串长度为N,两道题都要求时间复杂度为O(N),额外空间复杂度为O(1)
"""原问题"""
def rotate(chas):
if chas == None or len(chas) == 0:
return
reverse(chas,0,len(chas)-1)
left = -1
right = -1
for i in range(len(chas)):
if chas[i]!=' ':
if i==0 or chas[i-1] == ' ':
left = i
else:
left = left
if i==len(chas)-1 or chas[i+1] == ' ':
right = i
else:
right = right
if left!=-1 and right!=-1:
reverse(chas,left,right)
left = -1
right = -1
def reverse(chas,left,right):
if chas == None or len(chas) == 0:
return
while left < right:
chas[left],chas[right]= chas[right],chas[left]
left += 1
right -= 1
"""补充问题"""
def rotate1(chas,size):
if chas == None or len(chas) == 0:
return
reverse(chas,0,size-1)
reverse(chas,size,len(chas)-1)
reverse(chas,0,len(chas)-1)