Python修改後字串的最終狀態
假設我們有一個字串 S。長度為 n。這些 n 個盒子彼此相鄰,位置 i 處的字元 R 表示第 i 個盒子被推向右側。類似地,位置 i 處的 L 表示第 i 個盒子被推向左側,點“.”表示空位。從初始配置開始,在每個時間單位,一個被推向右側的盒子能夠將下一個盒子推向右側,同樣的操作也可以應用於左側。我們必須找到所有盒子在不再可行移動時的最終位置。
因此,如果輸入類似於 R..R...L.,則輸出將為 RRRRR.LL。
為了解決這個問題,我們將遵循以下步驟:
- N := 字串的大小
- movement := 大小為 N 的陣列,填充為 0
- m := 0
- 對於 i 從 0 到 N 的範圍,執行以下操作:
- 如果 string[i] 與 'R' 相同,則
- m := N
- 否則,如果 string[i] 與 'L' 相同,則
- m := 0
- 否則,
- m := m - 1 和 0 的最大值
- movement[i] := movement[i] + m
- 如果 string[i] 與 'R' 相同,則
- m := 0
- 對於 i 從 N - 1 到 -1 的範圍,遞減 1,執行以下操作:
- 如果 string[i] 與 'L' 相同,則
- m := N
- 否則,如果 string[i] 與 'R' 相同,則
- m := 0
- 否則,
- m := m - 1 和 0 的最大值
- movement[i] := movement[i] - m
- 如果 string[i] 與 'L' 相同,則
- 返回透過新增點(如果 m 為 0)或 'R'(如果 m > 0),否則為每個元素 m 在 movement 中新增 'L' 來構建一個字串。
示例程式碼
讓我們檢視以下實現以獲得更好的理解:
def get_final_pos(string):
N = len(string)
movement = [0] * N
m = 0
for i in range(0, N):
if string[i] == 'R':
m = N
elif string[i] == 'L':
m = 0
else:
m = max(m - 1, 0)
movement[i] += m
m = 0
for i in range(N - 1, -1, -1):
if string[i] == 'L':
m = N
elif string[i] == 'R':
m = 0
else:
m = max(m - 1, 0)
movement[i] -= m
return "".join('.' if m == 0 else 'R' if m > 0 else 'L' for m in movement)
print(get_final_pos('R..R...L.'))輸入
'R..R...L.'
輸出
RRRRR.LL.
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP