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

更新於: 2021年5月17日

328 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.