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

Chương trình kiểm tra xem chuỗi có thể biến đổi hay không với các hoạt động sắp xếp chuỗi con trong Python

Giả sử chúng ta có hai chuỗi số s và t, chúng ta muốn chuyển từ chuỗi s sang t bằng phép toán sau bất kỳ số lần nào:1. Chọn một chuỗi con không rỗng trong s và sắp xếp nó ở vị trí để các ký tự theo thứ tự tăng dần. Chúng ta phải kiểm tra xem có thể biến chuỗi s thành chuỗi t hay không.

Vì vậy, nếu đầu vào là s =​​"95643" t ="45963", thì đầu ra sẽ là True vì chúng ta có thể biến đổi s thành t bằng cách sử dụng như "95643" -> "95463" -> "45963".

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

  • địa điểm:=một bản đồ trong đó loại giá trị mặc định là danh sách

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

    • key:=s [i] as integer

    • điền tôi vào cuối các vị trí [key]

  • cho mỗi e trong t, làm

    • key:=e as integer

      • nếu địa điểm [key] trống, thì

        • trả về Sai

      • i:=phần tử cuối cùng của địa điểm [key]

      • đối với j trong phạm vi từ 0 đến khóa - 1, thực hiện

        • nếu địa điểm [j] không trống và phần tử cuối cùng của địa điểm [j]

          • trả về Sai

      • xóa phần tử cuối cùng khỏi các địa điểm [key]

  • trả về True

Ví dụ

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

from collections import defaultdict
def solve(s, t):
   places = defaultdict(list)
   for i in reversed(range(len(s))):
      key = int(s[i])
      places[key].append(i)

   for e in t:
      key = int(e)
      if not places[key]:
         return False
      i = places[key][-1]
      for j in range(key):
         if places[j] and places[j][-1] < i:
            return False
      places[key].pop()
   return True

s = "95643"
t = "45963"
print(solve(s, t))

Đầu vào

"95643", "45963"

Đầu ra

True