問題描述 :
給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典**現的單詞。
說明:拆分時可以重複使用字典中的單詞。
你可以假設字典中沒有重複的單詞。
示例 1:
輸入: s = 「leetcode」, worddict = [「leet」, 「code」]
輸出: true
解釋: 返回 true 因為 「leetcode」 可以被拆分成 「leet code」。
示例 2:
輸出: true
注意你可以重複使用字典中的單詞。
示例 3:
輸入: s = 「catsandog」, worddict = [「cats」, 「dog」, 「sand」, 「and」, 「cat」]
輸出: false
思路:
從字串s中擷取一段字串word,判斷word是否為worddict裡的單詞,若是,則標記為true
新建乙個vector< bool >dp(len+1,false)
dp[i] 表示第 i 個字元前,所有的字元是否可以按字典拆分成單詞
其中第 i - 1 個字元是上乙個詞的結尾字母,第 i 個字元是乙個新詞的開頭字母
初始值 dp[0] = true ,表示第 0 個字元是乙個新詞的開頭字母
所求的答案為 dp[s.size()] ,表示這個字串是否可以拆分成字典中的單詞
另外:s.substr(i).find(word) //表示從s字串的第i位開始擷取一直到最後一位,這個新擷取的字串裡是否能找到word,若找得到則返回首次出現的第乙個字元的位置
即用s.substr(i).find(word) ==0 來判斷
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
class
solution
}return dp[len];}
};intmain()
bool res=
solution()
.wordbreak
(s,worddict)
; cout<<
(res?
"true"
:"false"
)
}
139 單詞拆分 力扣
題意理解 給定乙個字串,給定乙個字串陣列,問字串能否用字串陣列拼接而成,字串陣列中的字串可以重複出現 問題分析 記憶性遞迴 這種組合問題需要遞迴來處理。0501 用動規來做 思路是字串分割為前幾個字元,後幾個字元,轉移方程是用前幾個字元是否可拆分,配上後面的字串是否存在。遍歷的時候容易出錯。其他05...
139 單詞拆分
給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典中出現的單詞。說明 示例 1 輸入 s leetcode worddict leet code 輸出 true解釋 返回 true 因為 leetcode 可以被拆分成 leet co...
139 單詞拆分
給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典 現的單詞。說明 示例 1 輸入 s leetcode worddict leet code 輸出 true 解釋 返回 true 因為 leetcode 可以被拆分成 leet co...