139. 单词拆分

139. 单词拆分

动态规划

dp[i]表示s[0~i-1]能否用字典拼接出来。

第一个for:计算dp[i]的时候检验加入s[i-1]是否合法
第二个for:拆分成s[0~j-1]s[j~i-1]两段,如果存在合法的可能,就说明加入s[i-1]是合法的,dp[i]=true;

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        auto wordSet=set<string>();
        for(auto word:wordDict){
            wordSet.insert(word);
        }
        
        auto dp=vector<int>(s.size()+1);
        dp[0]=true;
        
        for(int i=1;i<=s.size();i++){
            for(int j=0;j<i;j++){
                if(dp[j] && wordSet.find(s.substr(j,i-j))!=wordSet.end()){
                    dp[i]=true;
                    break;
                }
            }
        }
        
        return dp[s.size()];
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。