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

โปรแกรมเพื่อแบ่งพาร์ติชั่นสองสตริงเพื่อให้แต่ละพาร์ติชั่นสร้างแอนนาแกรมในPython


สมมติว่าเรามีสตริงที่ไม่ว่างสองสตริง s และ t ที่มีความยาวเท่ากัน เราต้องแบ่งมันออกเป็นสตริงย่อยเพื่อให้สตริงย่อย s และ t แต่ละคู่มีขนาดเท่ากันและเป็นแอนนาแกรมของกันและกัน ตอนนี้ให้หาดัชนีการตัดเพื่อให้ได้จำนวนการตัดสูงสุดของ s และ t หากไม่พบผลลัพธ์ ให้ส่งคืนรายการว่าง

ดังนั้น หากอินพุตเป็น s ="bowcattiger" t ="owbactietgr" ผลลัพธ์จะเป็น [0, 3, 5, 6, 10] เนื่องจากเราสามารถแบ่งสตริงออกเป็น 5 พาร์ติชั่น โดยแต่ละสตริงจะเป็น แอนนาแกรมของกันและกัน s =["โค้ง", "ca", "t", "tige", "r"], t =["owb", "ac", "t", "ietg", "r"]

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

  • ช่วงเวลา :=รายการใหม่
  • cs :=แผนที่ที่มีอักขระเป็น s และความถี่
  • ct :=แผนที่ที่มีอักขระเป็น t และความถี่
  • ถ้า cs ไม่เหมือนกับ ct แล้ว
    • คืนรายการใหม่
  • สำหรับ x ในขนาดช่วงของ s - 1 เหลือ 0 ทำ
    • cs[s[x]] :=cs[s[x]] - 1
    • ct[t[x]] :=ct[t[x]] - 1
    • ถ้า cs เหมือนกับ ct แล้ว
      • แทรก x ที่ส่วนท้ายของช่วงเวลา
  • เรียงลำดับช่วงเวลาของรายการแล้วกลับ

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

ตัวอย่าง

from collections import Counter
class Solution:
   def solve(self, a, b):
      intervals = []
      ca = Counter(a)
      cb = Counter(b)
      if ca != cb:
         return []
      for x in reversed(range(len(a))):
            ca[a[x]] -= 1
            cb[b[x]] -= 1
            if ca == cb:
               intervals.append(x)
      return sorted(intervals)
ob = Solution()
s = "bowcattiger"
t = "owbactietgr"
print(ob.solve(s, t))

อินพุต

"bowcattiger", "owbactietgr"

ผลลัพธ์

[0, 3, 5, 6, 10]