Leetcode 139 Word Break

Given a string s and a dictionary of strings wordDict, return true if s can be segmented into a space-separated sequence of one or more dictionary words.

Note that the same word in the dictionary may be reused multiple times in the segmentation.


Input: s = "leetcode", wordDict = ["leet","code"]
Output: true
Explanation: Return true because "leetcode" can be segmented as "leet code".


Input: s = "applepenapple", wordDict = ["apple","pen"]
Output: true
Explanation: Return true because "applepenapple" can be segmented as "apple pen apple".
Note that you are allowed to reuse a dictionary word.


Input: s = "catsandog", wordDict = ["cats","dog","sand","and","cat"]
Output: false

  • Bu soruda bize bir kelime(s) ve liste halinde bir kelimeler içeren bir sözlük(wordDict) veriliyor.
  • Bizden istenen ise kelime(s) sözlükteki kelimelerden oluşuyor ise True oluşmuyor ise False olarak dönmemiz.
  • Input: s = “leetcode”, wordDict = [“leet”,“code”] şeklinde girdilerimiz olsun.
  • s kelimesindeki her indexi uyumlu kelime var mı diye inceleyelim.
  • dp[8] = True -> s kelimemiz 8 harften oluşuyor yani dp[8] kelimenin bittiği boşluğa denk geliyor.Ama tüm s kelimesini başarılı bir şekilde bitirip sona varsaydık True dönecektik bundan dolayı True dedik.Ayrıca DP bir başlangıca ihtiyacımız var.
  • dp[7] = False -> e hiç bir kelime uymuyor.
  • dp[6] = False -> de hiç bir kelime uymuyor.
  • dp[5] = False -> ode hiç bir kelime uymuyor.
  • dp[4] = True -> code sözlükte var.
  • dp[3] = False -> tcode hiç bir kelime uymuyor.
  • dp[2] = False -> etcode hiç bir kelime uymuyor.
  • dp[1] = False -> eetcode hiç bir kelime uymuyor.
  • dp[0] = True -> leet sözlükte var.
  • Burada dp[0] = dp[0 + len(w)] şeklinde kontrol ederek bir desen yakalayabiliriz.
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
        dp = [False] * (len(s) + 1)
        dp[len(s)] = True
        
        for i in range(len(s) -1, -1, -1):
            for w in wordDict:
                if (i + len(w)) <= len(s) and s[i : i +len(w)] == w:
                    dp[i] = dp[i + len(w)]
                if dp[i]:
                    break
        return dp[0]