1. 程式人生 > >騰訊,演算法基礎,字元移位

騰訊,演算法基礎,字元移位

題目描述
小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