騰訊,演算法基礎,字元移位
阿新 • • 發佈:2019-01-14
題目描述
小Q最近遇到了一個難題:把一個字串的大寫字母放到字串的後面,各個字元的相對位置不變,且不能申請額外的空間。
你能幫幫小Q嗎?
解題思路
不申請額外的空間的意思是可以申請O(1)的空間,但是不能申請O(n)的空間
遇到字串移位的題目,可以考慮從後面往前面移動。使用一個指標指向最後一個大寫字母,然後從後面往前面遍歷,如果是大寫字母,將後面的所有小寫字母往前面移動一位,然後將大寫字母放在這個指標的前面,指標再向前移動。
另外他只是輸出,因此可以先輸出小寫字母,再輸出大寫字母,這樣也可以不申請額外的空間。
程式碼
import sys
def MoveChar(s):
string = list(s)
lastUp = len(string) - 1
for i in range(len(string) - 1, -1, -1):
if string[i] >= 'A' and string[i] <='Z':
up = string[i]
for j in range(i, lastUp):
string[j] = string[j + 1]
string[lastUp] = up
lastUp -= 1
return ''.join(string)
try:
while True:
s = sys.stdin.readline().strip()
if s == '':
break
print(MoveChar(s))
except:
pass