สมมติว่าเรามีสองสตริง s และ t ที่มีขนาดเท่ากัน เราต้องตรวจสอบว่ามีการเรียงสับเปลี่ยนของ s หรือไม่ พูดว่า s1 และการเปลี่ยนลำดับของ t พูด t1 เช่น s1[i] ≤ t1[i] สำหรับทุกคน 0 ≤ i
ดังนั้น หากอินพุตเป็น s ="vyx" t ="wzx" ผลลัพธ์จะเป็น True เนื่องจากเราสามารถมี s1 ="vxy" และ t1 ="wxz" ได้
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้า s กับ t ว่าง งั้น
- คืนค่า True
- s :=จัดเรียงสตริง s
- t :=เรียงลำดับสตริง t
- กำหนดฟังก์ชัน util() นี่จะใช้เวลา s1, s2
- สำหรับฉันในช่วง 0 ถึงขนาด s1 ทำ
- ถ้า s1[i]> t1[i] แล้ว
- คืนค่าเท็จ
- ถ้า s1[i]> t1[i] แล้ว
- คืนค่า True
- จากวิธีหลัก ให้ทำดังนี้ -
- ถ้า util(s, t) เป็นจริง แล้ว
- คืนค่า True
- สลับ s และ t
- ผลตอบแทน util(s, t)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, s, t): if not len(s) or not len(t): return True s = sorted(s) t = sorted(t) def util(s1, t1): for i in range(len(s1)): if s1[i] > t1[i]: return False return True if util(s, t): return True s, t = t, s return util(s, t) ob = Solution() s = "vyx" t = "wzx" print(ob.solve(s, t))
อินพุต
"vyx", "wzx"
ผลลัพธ์
True