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

Kiểm tra xem có thể chuyển đổi một chuỗi này thành chuỗi khác với các ràng buộc nhất định trong Python hay không

Giả sử chúng ta có hai chuỗi s và t chỉ có ba ký tự 'A', 'B' và '#'. Chúng ta phải kiểm tra xem có thể chuyển s thành t hay không bằng cách thực hiện các thao tác này trên s.

  • 'A' chỉ có thể di chuyển sang phía bên trái
  • 'B' chỉ có thể di chuyển sang phía bên tay phải
  • Cả 'A' và 'B' đều không thể vượt nhau

Vì vậy, nếu đầu vào giống như s ="## AB ## B" t ="A ### B # B", thì đầu ra sẽ là True vì trong s A có thể dễ dàng di chuyển sang vị trí bên trái nhất và giữa B có thể di chuyển một bước sang phải

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

  • s:=một danh sách bằng cách lấy các ký tự từ s
  • t:=một danh sách bằng cách lấy các ký tự từ t
  • nếu kích thước của s không giống với kích thước của t, thì
    • trả về Sai
  • nếu số lượng 'A' trong s và t khác nhau hoặc số lượng 'B' trong s và t khác nhau hoặc, thì
    • trả về Sai
  • đối với tôi trong phạm vi từ 0 đến kích thước là s-1, hãy thực hiện
    • nếu s [i] không giống với '#', thì
      • đối với j trong phạm vi từ 0 đến kích thước của t - 1, thực hiện
        • nếu (t [j] không giống với s [i]) và t [j] không giống với '#', thì
          • trả về Sai
        • nếu t [j] giống với s [i], thì
          • t [j]:='#'
          • nếu s [i] giống với 'A' và i
          • trả về Sai
        • nếu s [i] giống với 'B' và i> j, thì
          • trả về Sai
        • ra khỏi vòng lặp
  • trả về True
  • 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, t):
       s = list(s)
       t = list(t)
       if len(s) != len(t):
          return False
       if s.count('A') != t.count('A') or s.count('B') != t.count('B'):
          return False
       for i in range(len(s)):
          if s[i] != '#':
             for j in range(len(t)):
                if (t[j] != s[i]) and t[j] != '#':
                   return False
                if t[j] == s[i]:
                   t[j] = '#'
                   if s[i] == 'A' and i < j:
                      return False
                   if s[i] == 'B' and i > j:
                      return False
                   break
       return True
    s = "##AB##B"
    t = "A###B#B"
    print (solve(s, t))

    Đầu vào

    "##AB##B", "A###B#B"

    Đầu ra

    True