Python程式:構建沒有兩個相鄰數字相同的最小數字
假設我們有一個字串 s,其中包含四個可能的字元“1”,“2”,“3”和“?”。我們可以將“1”,“2”和“3”中的任意一個放置在“?”的位置。我們需要找到可以構建的最小可能的數字,使得沒有兩個相鄰的數字相同。
因此,如果輸入類似於 s = "2??3?",則輸出將為 21231
為了解決這個問題,我們將遵循以下步驟:
- i := 0
- s := s 中元素的列表
- 如果 s 的大小 < 2,則
- 如果 s[i] 等於 "?",則
- 返回 "1"
- 如果 s[i] 等於 "?",則
- 當 i < s 的大小 時,執行以下操作:
- 如果 s[i] 等於 "?",則
- 如果 i 等於 0,則
- 當 s[i + 1] 不等於 "1" 時,s[i] := "1",否則 s[i] := "2"
- 否則,當 i > 0 且 i <= s 的大小 - 2 時,
- 如果 s[i - 1] 等於 "1",則
- 如果 s[i + 1] 等於 "2",則
- s[i] := "3"
- 否則,
- s[i] := "2"
- 如果 s[i + 1] 等於 "2",則
- 否則,當 s[i - 1] 等於 "2" 時,
- 如果 s[i + 1] 等於 "2",則
- s[i] := "3"
- 否則,
- s[i] := "1"
- 如果 s[i + 1] 等於 "2",則
- 否則,當 s[i - 1] 等於 "3" 時,
- 如果 s[i + 1] 等於 "2",則
- s[i] := "2"
- 否則,
- s[i] := "1"
- 如果 s[i + 1] 等於 "2",則
- 如果 s[i - 1] 等於 "1",則
- 否則,
- 當 s[i - 1] 不等於 "1" 時,s[i] := "1",否則 s[i] := "2"
- 如果 i 等於 0,則
- i := i + 1
- 如果 s[i] 等於 "?",則
- 將 s 中的項連線成字串並返回
示例
讓我們看看以下實現以更好地理解:
def solve(s): i = 0 s = list(s) if len(s) < 2: if s[i] == "?": return "1" while i < len(s): if s[i] == "?": if i == 0: s[i] = "1" if s[i + 1] != "1" else "2" elif i > 0 and i <= len(s) - 2: if s[i - 1] == "1": if s[i + 1] == "2": s[i] = "3" else: s[i] = "2" elif s[i - 1] == "2": if s[i + 1] == "1": s[i] = "3" else: s[i] = "1" elif s[i - 1] == "3": if s[i + 1] == "1": s[i] = "2" else: s[i] = "1" else: s[i] = "1" if s[i - 1] != "1" else "2" i += 1 return "".join(s) s = "2??3?" print(solve(s))
輸入
"2??3?"
輸出
21231
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP