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
广告