Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình thay thế tất cả các ký hiệu câu hỏi để tránh các ký tự lặp lại liên tiếp trong Python

Giả sử chúng ta có một chuỗi chữ thường s chỉ chứa các chữ cái và '?' ký tự, chúng ta phải chuyển đổi tất cả '?' ký tự thành chữ thường sao cho chuỗi cuối cùng sẽ không có bất kỳ ký tự lặp lại liên tiếp nào. Nếu có nhiều hơn một giải pháp, hãy trả lại bất kỳ giải pháp nào trong số chúng.

Vì vậy, nếu đầu vào giống như s ="hel ??", thì đầu ra sẽ là helab, dấu hỏi đầu tiên có thể là bất kỳ thứ gì ngoại trừ 'l' và khi đầu tiên được đưa ra, thì dấu thứ hai có thể là bất kỳ thứ gì ngoại trừ 'a' .

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • nếu kích thước của s bằng 1 thì

    • nếu s giống với "?", thì

      • trả về "a"

    • trả lại s

  • s:=danh sách các ký tự có trong s

  • đối với tôi trong phạm vi từ 0 đến kích thước của s-1, hãy thực hiện

    • nếu s [i] giống với "?" thì

      • nếu tôi giống với 0 và s [i + 1] giống với "?", thì

        • s [i]:="a"

      • ngược lại khi tôi giống 0 và s [i + 1] giống "a" thì

        • s [i]:="b"

      • ngược lại khi tôi giống 0 thì

        • s [i]:="a"

      • ngược lại khi tôi giống với (kích thước của s) -1 và s [i-1] giống với "a" thì

        • s [i]:="b"

      • ngược lại, khi tôi giống với (kích thước của s) -1, thì

        • s [i]:="a"

      • ngược lại khi s [i-1] giống "a" và s [i + 1] giống "?" thì

        • s [i]:="b"

      • ngược lại khi s [i + 1] giống với "?" thì

        • s [i]:="a"

      • ngược lại khi (s [i-1] giống "a" và s [i + 1] giống "b") hoặc (s [i-1] giống "b" và s [i + 1] giống như "a"), sau đó

        • s [i]:="c"

      • ngược lại khi s [i-1] hoặc s [i + 1] là "a" thì

        • s [i]:="b"

      • nếu không,

        • s [i]:="a"

  • trả về s sau khi nối các ký tự thành chuỗi

Ví dụ (Python)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

"hel??"

Đầu ra

helab