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

Word Break II ใน Python


สมมติว่าเรามีสตริงที่ไม่ว่าง 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']