Giả sử ta có chuỗi thường s chỉ chứa chữ cái và ký tự '?'. Chuyển tất cả '?' thành chữ thường sao cho chuỗi kết quả không có ký tự lặp liên tiếp. Nếu nhiều giải pháp, trả về bất kỳ cái nào.
Ví dụ: s = "hel??", kết quả "helab" (dấu ? đầu không được là 'l', dấu ? thứ hai không được là 'a').
Giải thuật
- Nếu
len(s) == 1:- Nếu
s == "?": trả về"a" - Trả về
s
- Nếu
- Chuyển
sthành list ký tự - For
itừ 0 đếnlen(s)-1:- Nếu
s[i] == "?": thay thế dựa trên ký tự trái/phải (ưu tiên 'a', 'b', 'c' tránh trùng lặp)
- Nếu
- Trả về chuỗi nối từ list
Ví dụ (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))
Input
"hel??"
Output
helab