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

Chuỗi chuyển đổi thành một chuỗi khác trong Python

Giả sử chúng ta có hai chuỗi str1 và str2. Và độ dài của chúng là như nhau, chúng ta phải kiểm tra xem chúng ta có thể chuyển đổi str1 thành str2 bằng cách thực hiện không hoặc nhiều chuyển đổi hay không.

Trong một lần chuyển đổi, chúng ta có thể chuyển đổi tất cả các lần xuất hiện của một ký tự trong str1 thành bất kỳ ký tự tiếng Anh viết thường nào khác. Chúng ta phải kiểm tra xem chúng ta có thể chuyển đổi str1 thành str2 hay không.

Vì vậy, nếu đầu vào giống như str1 ="aabcc", str2 ="ccdee", thì đầu ra sẽ là true, vì Chuyển đổi 'c' thành 'e' rồi 'b' thành 'd' rồi 'a' thành 'c '. Ở đây, chúng tôi phải ghi nhớ rằng thứ tự chuyển đổi rất quan trọng.

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

  • Định nghĩa một hàm nén (). Điều này sẽ mất s

  • n:=kích thước của s

  • a:=một danh sách mới

  • đếm:=1

  • đối với tôi trong phạm vi từ 1 đến n, hãy thực hiện

    • nếu s [i] không giống với s [i-1] thì

      • chèn số lượng vào cuối

      • đếm:=1

    • nếu không,

      • count:=count + 1

  • chèn số lượng vào cuối

  • trả lại một

  • Định nghĩa một hàm canConvert (). Điều này sẽ lấy str1, str2

  • a:=nén (str1)

  • b:=nén (str2)

  • n:=kích thước của a, m:=kích thước của b

  • d:=một bản đồ mới

  • n:=tối thiểu là n, m

  • i:=0

  • trong khi i

    • nếu a [i]> b [i] khác 0 thì

      • trả về Sai

    • i:=i + 1

  • đối với mỗi tôi trong str2, hãy thực hiện

    • nếu tôi không ở d là khác 0, thì

      • d [i]:=1

  • trả về True nếu 26 - kích thước của d khác 0 hoặc str1 giống str2 nếu không thì False

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

Ví dụ

class Solution(object):
   def compress(self,s):
      n = len(s)
      a = []
      count = 1
      for i in range(1,n):
         if s[i]!=s[i-1]:
            a.append(count)
            count=1
         else:
            count+=1
      a.append(count)
      return a
   def canConvert(self, str1, str2):
      a = self.compress(str1)
      b = self.compress(str2)
      n = len(a)
      m = len(b)
      d={}
      n = min(n,m)
      i = 0
      while i<n:
         if a[i]>b[i]:
            return False
            i+=1
         for i in str2:
            if i not in d:
               d[i]=1
      return True if 26-len(d) or str1 == str2 else False

ob = Solution()
print(ob.canConvert("aabcc", "ccdee"))

Đầu vào

"aabcc", "ccdee"

Đầu ra

True