139. 單詞拆分單詞拆分
給你一個字符串?s
?和一個字符串列表?wordDict
?作為字典。如果可以利用字典中出現的一個或多個單詞拼接出?s
?則返回?true
。
注意:不要求字典中出現的單詞全部都使用,并且字典中的單詞可以重復使用。
思路:
規定dp[i]是從0-i的字符串是否可以被字典表示,則dp[i]可能通過0-i-1之間的dp加一個字典中的字符串表示,則只需要每次遍歷字典,看是否有存在j,使得j-i是字典中的字符串,且dp[j-1] 為可以被表示,則此時dp[i]為正。
初始化中dp[0]為true,原因是沒有元素時一定可以由字典表示,即沒有一個字符串。
class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {int n=s.size();vector<bool>isexit(n+1,false);set<string>sets(wordDict.begin(),wordDict.end());isexit[0]=true;for(int i=1;i<n+1;i++){for(int j=1;j<=i;j++){ string str(s.begin()+j-1,s.begin()+i);if(isexit[j-1]&&sets.count(str)){isexit[i]=true;}}}return isexit.back();}
};