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

Chương trình tạo số nhỏ nhất trong đó không có hai chữ số liền kề nào giống nhau trong Python

Giả sử chúng ta có một chuỗi s với bốn ký tự có thể có là "1", "2", "3" và "?". Chúng ta có thể đặt bất kỳ một trong số "1", "2" và "3", thay cho "?". Chúng ta phải tìm số nhỏ nhất có thể mà chúng ta có thể tạo ra sao cho không có hai chữ số liền kề nào giống nhau.

Vì vậy, nếu đầu vào là s =​​"2 ?? 3?", Thì đầu ra sẽ là 21231

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

  • i:=0
  • s:=danh sách các phần tử từ s
  • nếu kích thước của s <2, thì
    • nếu s [i] giống với "?", thì
      • trả về "1"
  • while i
  • nếu s [i] giống với "?", thì
    • nếu tôi giống 0, thì
      • s [i]:="1" khi s [i + 1] không phải là "1", ngược lại là "2"
    • ngược lại khi i> 0 và i <=size của s - 2 thì
      • nếu s [i - 1] giống với "1", thì
        • nếu s [i + 1] giống với "2" thì
          • s [i]:="3"
        • nếu không,
          • s [i]:="2"
      • ngược lại khi s [i - 1] giống với "2" thì
        • nếu s [i + 1] giống với "2" thì
          • s [i]:="3"
        • nếu không,
          • s [i]:="1"
      • ngược lại khi s [i - 1] giống với "3" thì
        • nếu s [i + 1] giống với "2" thì
          • s [i]:="2"
        • nếu không,
          • s [i]:="1"
    • nếu không,
      • s [i]:="1" khi s [i - 1] không phải là "1", ngược lại là "2"
  • i:=i + 1
  • nối các mục của s thành một chuỗi và trả về
  • Ví dụ

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

    def solve(s):
       i = 0
       s = list(s)
       if len(s) < 2:
          if s[i] == "?":
             return "1"
       while i < len(s):
          if s[i] == "?":
             if i == 0:
                s[i] = "1" if s[i + 1] != "1" else "2"
             elif i > 0 and i <= len(s) - 2:
                if s[i - 1] == "1":
                   if s[i + 1] == "2":
                      s[i] = "3"
                   else:
                      s[i] = "2"
                elif s[i - 1] == "2":
                   if s[i + 1] == "1":
                      s[i] = "3"
                   else:
                      s[i] = "1"
                elif s[i - 1] == "3":
                   if s[i + 1] == "1":
                      s[i] = "2"
                   else:
                      s[i] = "1"
             else:
                s[i] = "1" if s[i - 1] != "1" else "2"
          i += 1
       return "".join(s)
    
    s = "2??3?"
    print(solve(s))

    Đầu vào

    "2??3?"
    

    Đầu ra

    21231