用 Python 编写程序,求出最小数,其中没有两个相邻的数字相同

pythonserver side programmingprogramming更新于 2026/1/3 12:28:17

假设我们有一个字符串 s,其中有四个可能的字符"1"、"2"、"3"和"?"。我们可以用"1"、"2"和"3"中的任意一个来代替"?"。我们必须找到最小的可能数字,使得没有两个相邻的数字是相同的。

因此,如果输入为 s = "2??3?",则输出为 21231

要解决这个问题,我们将遵循以下步骤 −

  • i := 0
  • s := s 中的元素列表
  • 如果 s 的大小 < 2,则
    • 如果 s[i] 与 "?" 相同,则
      • 返回 "1"
  • 当 i < s 的大小时,执行
    • 如果 s[i] 与 "?" 相同,则
      • 如果 i 与 0 相同,则
        • 当 s[i + 1] 不为 "1" 时,s[i] := "1" 否则为 "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] := "3"
          • 否则,
            • s[i] := "1"
        • 否则,当 s[i - 1] 与"3"相同时,则
          • 如果 s[i + 1] 与"2"相同,则
            • s[i] := "2"
          • 否则,
            • s[i] := "1"
      • 否则,
        • s[i] := "1" 当 s[i - 1] 不为 "1" 否则为 "2"
    • i := i + 1
  • 将 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

相关文章


有用资源