สมมติว่าเรามีสตริงที่ไม่ว่าง s และพจนานุกรมชื่อ wordDict พจนานุกรมนี้มีรายการคำที่ไม่ว่างเปล่า เพิ่มช่องว่างใน s เพื่อสร้างประโยคโดยที่แต่ละคำอยู่ คำในพจนานุกรมที่ถูกต้อง เราต้องหาประโยคที่เป็นไปได้ทั้งหมด “appleraincoat” และพจนานุกรมคือ [“app”, “apple”, “rain”, “coat”, “raincoat”]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
สร้างบันทึกแผนที่หนึ่งรายการ
-
กำหนดวิธีการที่เรียกว่า Solve ซึ่งจะใช้ string และ wordDict
-
ถ้า s เป็นค่าว่าง ให้คืนค่ารายการว่าง
-
ถ้าอยู่ในบันทึกแล้ว −
-
บันทึกการส่งคืน[s]
-
-
สร้างอาร์เรย์ ret
-
สำหรับผมอยู่ในช่วง 1 ถึงขนาด s
-
ถ้าสตริงย่อยของ s จากดัชนี 0 ถึง i – 1 มีอยู่ใน wordDict แล้ว
-
สำหรับ j ในการแก้ปัญหา (สตริงย่อยของ s จาก i ไปยังจุดสิ้นสุด wordDict)
-
p :=สตริงย่อยของ s จากดัชนี 0 ถึง i – 1 เชื่อมด้วยช่องว่างและ j จากนั้นล้างช่องว่างเพิ่มเติมจากด้านซ้ายและขวา −
-
แทรก p ลงใน ret
-
-
-
บันทึก[s] :=ย้อนหลัง
-
บันทึกการส่งคืน[s]
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution(object): def wordBreak(self, s, wordDict): self.memo = {} wordDict = set(wordDict) return self.solve(s,wordDict) def solve(self,s, wordDict): if not s: return [''] if s in self.memo: return self.memo[s] ret = [] for i in range(1,len(s)+1): if s[:i] in wordDict: for j in self.solve(s[i:],wordDict): ret.append((s[:i] + " " + j).strip()) self.memo[s] = ret return self.memo[s] ob = Solution() print(ob.wordBreak("appleraincoat",["app","apple","rain","coat","rain coat"]))
อินพุต
"appleraincoat" ["app","apple","rain","coat","raincoat"]
ผลลัพธ์
['apple rain coat', 'apple raincoat']