สมมติว่าเรามีสตริงตัวเลขสองสตริง s และ t เราต้องการเปลี่ยนจากสตริง s เป็น t โดยใช้การดำเนินการต่อไปนี้กี่ครั้งก็ได้:1. เลือกสตริงย่อยที่ไม่ว่างใน s และจัดเรียงแบบแทนที่เพื่อให้อักขระอยู่ในลำดับจากน้อยไปมาก เราต้องตรวจสอบก่อนว่าสามารถเปลี่ยน string s เป็น string t ได้หรือไม่
ดังนั้น หากอินพุตเป็นแบบ s ="95643" t ="45963" ผลลัพธ์จะเป็น True เพราะเราสามารถแปลง s เป็น t ได้โดยใช้ เช่น "95643" -> "95463" -> "45963"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
สถานที่ :=แผนที่ที่ประเภทค่าเริ่มต้นคือรายการ
-
สำหรับฉันในช่วงขนาด s ลงไปที่ 0 ทำ
-
คีย์ :=s[i] เป็นจำนวนเต็ม
-
ใส่ i ต่อท้ายสถานที่[คีย์]
-
-
สำหรับแต่ละ e ใน t ทำ
-
คีย์ :=e เป็นจำนวนเต็ม
-
ถ้า places[key] ว่างเปล่า แสดงว่า
-
คืนค่าเท็จ
-
-
i :=องค์ประกอบสุดท้ายของสถานที่[คีย์]
-
สำหรับ j ในช่วง 0 ถึงคีย์ - 1 ทำ
-
ถ้า places[j] ไม่ว่างเปล่าและเป็นองค์ประกอบสุดท้ายของ places[j]
-
คืนค่าเท็จ
-
-
-
ลบองค์ประกอบสุดท้ายออกจากสถานที่[คีย์]
-
-
-
คืนค่า True
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น
from collections import defaultdict def solve(s, t): places = defaultdict(list) for i in reversed(range(len(s))): key = int(s[i]) places[key].append(i) for e in t: key = int(e) if not places[key]: return False i = places[key][-1] for j in range(key): if places[j] and places[j][-1] < i: return False places[key].pop() return True s = "95643" t = "45963" print(solve(s, t))
อินพุต
"95643", "45963"
ผลลัพธ์
True