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 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告