Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

สตริงแปลงเป็นสตริงอื่นใน Python


สมมติว่าเรามีสองสตริง str1 และ str2 และความยาวของมันเท่ากัน เราต้องตรวจสอบว่าเราสามารถแปลง str1 เป็น str2 โดยทำการแปลงเป็นศูนย์หรือมากกว่า

ในการแปลงครั้งเดียว เราสามารถแปลงการเกิดขึ้นทั้งหมดของอักขระหนึ่งตัวใน str1 เป็นอักขระภาษาอังกฤษตัวพิมพ์เล็กอื่น ๆ เราต้องตรวจสอบว่าเราสามารถแปลง str1 เป็น str2 ได้หรือไม่

ดังนั้น หากอินพุตเป็นเหมือน str1 ="aabcc", str2 ="ccdee" ผลลัพธ์จะเป็นจริง เช่น แปลง 'c' เป็น 'e' จากนั้น 'b' เป็น 'd' จากนั้น 'a' เป็น 'c '. ที่นี่เราต้องจำไว้ว่าลำดับของการแปลงมีความสำคัญ

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชั่นการบีบอัด () นี่จะใช้เวลา s

  • n :=ขนาดของ s

  • a :=รายการใหม่

  • นับ :=1

  • สำหรับผมอยู่ในช่วง 1 ถึง n ทำ

    • ถ้า s[i] ไม่เหมือนกับ s[i-1] แล้ว

      • แทรกนับในตอนท้ายของ a

      • จำนวน:=1

    • มิฉะนั้น

      • นับ :=นับ + 1

  • แทรกนับในตอนท้ายของ a

  • กลับ

  • กำหนดฟังก์ชัน canConvert() นี่จะใช้เวลา str1, str2

  • a :=บีบอัด(str1)

  • b :=บีบอัด (str2)

  • n :=ขนาดของ a, m :=ขนาดของ b

  • d:=แผนที่ใหม่

  • n :=ขั้นต่ำของ n, m

  • ผม :=0

  • ในขณะที่ i

    • ถ้า a[i]>b[i] ไม่ใช่ศูนย์ ดังนั้น

      • คืนค่าเท็จ

    • ผม :=ผม + 1

  • สำหรับแต่ละ i ใน str2 ทำ

    • ถ้าฉันไม่อยู่ใน d ก็ไม่เท่ากับศูนย์ แล้ว

      • d[i]:=1

  • คืนค่า True ถ้า 26 - ขนาดของ d ไม่ใช่ศูนย์หรือ str1 เหมือนกับ str2 มิฉะนั้นจะเป็นเท็จ

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

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

อินพุต

"aabcc", "ccdee"

ผลลัพธ์

True