สมมติว่าเรามีสองสตริง s, t และอีกสตริง r เราต้องตรวจสอบว่ามีวิธีใดที่จะได้ r โดยการรวมอักขระตามลำดับจาก s และ t
ดังนั้น หากอินพุตเป็น s ="xyz" t ="mno" r ="xymnoz" ผลลัพธ์จะเป็น True เนื่องจาก xymnoz สามารถเกิดขึ้นได้จากการแทรกระหว่าง xyz และ mno
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน Solve() นี่จะใช้เวลา s, t, r
-
ถ้า s, t และ r ว่างเปล่า แสดงว่า
-
คืนค่า True
-
ถ้า r ว่างเปล่า แสดงว่า
-
คืนค่าเท็จ
-
-
-
-
ถ้า s ว่างแล้ว
-
คืนค่า จริง เมื่อ t เหมือนกับ r มิฉะนั้น เท็จ
-
-
ถ้าไม่ใช่ t ก็ไม่ใช่ศูนย์ ดังนั้น
-
ผลตอบแทน s เหมือนกับ r
-
-
ถ้า s[0] เหมือนกับ r[0] แล้ว
-
ถ้าแก้(s[จากดัชนี 1 ถึงจุดสิ้นสุด], t, r[จากดัชนี 1 ถึงจุดสิ้นสุด]) เป็นจริง ดังนั้น
-
คืนค่า True
-
-
-
ถ้า t[0] เหมือนกับ r[0] แล้ว
-
ถ้าแก้ (s, t[จากดัชนี 1 ถึงสิ้นสุด], r[จากดัชนี 1 ถึงสิ้นสุด]) เป็นจริง ดังนั้น
-
คืนค่า True
-
-
-
คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, s, t, r): if not s and not t and not r: return True if not r: return False if not s: return t == r if not t: return s == r if s[0] == r[0]: if self.solve(s[1:], t, r[1:]): return True if t[0] == r[0]: if self.solve(s, t[1:], r[1:]): return True return False ob = Solution() s = "xyz" t = "mno" r = "xymnoz" print(ob.solve(s, t, r))
อินพุต
"xyz", "mno", "xymnoz"
ผลลัพธ์
True