1. 問題描述:
給你乙個僅包含小寫英文本母和 '?' 字元的字串 s,請你將所有的 '?' 轉換為若干小寫字母,使最終的字串不包含任何 連續重複 的字元。
注意:你 不能 修改非 '?' 字元。
題目測試用例保證 除 '?' 字元 之外,不存在連續重複的字元。
在完成所有轉換(可能無需轉換)後返回最終的字串。如果有多個解決方案,請返回其中任何乙個。可以證明,在給定的約束條件下,答案總是存在的。
示例 1:
輸入:s = "?zs"
輸出:"azs"
解釋:該示例共有 25 種解決方案,從 "azs" 到 "yzs" 都是符合題目要求的。只有 "z" 是無效的修改,因為字串 "zzs" 中有連續重複的兩個 'z' 。
示例 2:
輸入:s = "ubv?w"
輸出:"ubvaw"
解釋:該示例共有 24 種解決方案,只有替換成 "v" 和 "w" 不符合題目要求。因為 "ubvvw" 和 "ubvww" 都包含連續重複的字元
示例 3:
輸入:s = "j?qg??b"
輸出:"jaqgacb"
示例 4:
輸入:s = "??yw?ipkj?"
輸出:"acywaipkja"
2. 思路分析:
① 乙個比較容易想到的方法是遍歷字串,對當前遍歷的字元進行判斷,如果是問號那麼嘗試填入26個字母中不與當前問號的相鄰左右字母重複的字母,因為字串是不可改變的序列所以需要轉為列表來進行操作,此外還需要注意乙個問題是在檢查相鄰左右字元的時候有可能會發生索引越界了,比如在第乙個字元與最後乙個字元是問號的時候就會發生這個錯誤,為了避免這個問題可以在原來字串的基礎上新增兩個額外的字元"0"來避免這個問題
② 可以使用python中的string.ascii_lowercase來生成26個小寫字母
3. **如下:
import string
class solution:
def modifystring(self, s: str) -> str:
# 使用string生成26個小寫的字母
aphs = string.ascii_lowercase
print(aphs)
s = list("0" + s + "0")
for i in range(1, len(s)):
if s[i] == "?":
for c in aphs:
if c != s[i - 1] and c != s[i + 1]:
s[i] = c
# 擷取字串中第二個到倒數第二個的元素
return s[1:-1]
1576 替換所有的問號
題目描述 給你乙個僅包含小寫英文本母和 字元的字串 s,請你將所有的 轉換為若干小寫字母,使最終的字串不包含任何 連續重複 的字元。注意 你 不能 修改非 字元。題目測試用例保證 除 字元 之外,不存在連續重複的字元。在完成所有轉換 可能無需轉換 後返回最終的字串。如果有多個解決方案,請返回其中任何...
1576 替換所有的問號
給你乙個僅包含小寫英文本母和 字元的字串 s,請你將所有的 轉換為若干小寫字母,使最終的字串不包含任何 連續重複 的字元。注意 你 不能 修改非 字元。題目測試用例保證 除 字元 之外,不存在連續重複的字元。在完成所有轉換 可能無需轉換 後返回最終的字串。如果有多個解決方案,請返回其中任何乙個。可以...
Leetcode 1576 替換所有的問號
題目 給你乙個僅包含小寫英文本母和 字元的字串 s,請你將所有的 轉換為若干小寫字母,使最終的字串不包含任何 連續重複 的字元。注意 你 不能 修改非 字元。題目測試用例保證 除 字元 之外,不存在連續重複的字元。在完成所有轉換 可能無需轉換 後返回最終的字串。如果有多個解決方案,請返回其中任何乙個...