Python程式:替換所有問號以避免連續重複字元
假設我們有一個只包含字母和“?”字元的小寫字串 s,我們需要將所有“?”字元轉換為小寫字母,使得最終字串中沒有連續重複的字元。如果有多個解決方案,則返回其中任何一個。
因此,如果輸入類似於 s = "hel??", 則輸出將是 helab,因為第一個問號可以是除 'l' 之外的任何字元,當第一個問號被賦值後,第二個問號可以是除 'a' 之外的任何字元。
為了解決這個問題,我們將遵循以下步驟:
如果 s 的大小為 1,則
如果 s 等於 "?", 則
返回 "a"
返回 s
s := s 中存在的字元列表
對於 i 從 0 到 s 的大小 - 1,執行以下操作:
如果 s[i] 等於 "?", 則
如果 i 等於 0 且 s[i+1] 等於 "?", 則
s[i] := "a"
否則,如果 i 等於 0 且 s[i+1] 等於 "a", 則
s[i] := "b"
否則,如果 i 等於 0,則
s[i] := "a"
否則,如果 i 等於 (s 的大小)-1 且 s[i-1] 等於 "a", 則
s[i] := "b"
否則,如果 i 等於 (s 的大小)-1,則
s[i] := "a"
否則,如果 s[i-1] 等於 "a" 且 s[i+1] 等於 "?", 則
s[i] := "b"
否則,如果 s[i+1] 等於 "?", 則
s[i] := "a"
否則,如果 (s[i-1] 等於 "a" 且 s[i+1] 等於 "b") 或 (s[i-1] 等於 "b" 且 s[i+1] 等於 "a"),則
s[i] := "c"
否則,如果 s[i-1] 或 s[i+1] 為 "a",則
s[i] := "b"
否則,
s[i] := "a"
返回將字元連線成字串後的 s
示例 (Python)
讓我們看看以下實現,以便更好地理解:
def solve(s): if len(s) == 1 : if s == "?": return "a" return s s = list(s) for i in range(len(s)): if s[i] == "?": if i == 0 and s[i+1] == "?": s[i] = "a" elif i == 0 and s[i+1] == "a": s[i] = "b" elif i == 0: s[i] = "a" elif i == len(s)-1 and s[i-1] == "a": s[i] = "b" elif i == len(s)-1: s[i] = "a" elif s[i-1] == "a" and s[i+1] == "?": s[i] = "b" elif s[i+1] == "?": s[i] = "a" elif (s[i-1] == "a" and s[i+1] == "b") or (s[i-1] == "b" and s[i+1] == "a"): s[i] = "c" elif "a" in (s[i-1],s[i+1]): s[i] = "b" else: s[i] = "a" return "".join(s) s = "hel??" print(solve(s))
輸入
"hel??"
輸出
helab
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP