Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình thay thế dấu hỏi tránh ký tự lặp liên tiếp trong Python

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

  1. Nếu len(s) == 1:
    • Nếu s == "?": trả về "a"
    • Trả về s
  2. Chuyển s thành list ký tự
  3. For i từ 0 đến len(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)
  4. 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