算法练习第四十天 139

139.单词拆分

思路:这是一个使用动态规划的字符串问题的解法,目标是判断字符串s是否能够被单词列表wordDict中的单词拼接而成。具体来说,使用一个布尔型数组dp记录s的前缀子串是否可以由wordDict中的单词拼接而成。数组dp的长度为s的长度+1,dp[0]被初始化为true,表示空字符串可以由空列表拼接而成。接下来,从i=1开始,对于每个i,将字符串s从0到i拆分成两个子串s[0:j]和s[j:i],其中s[0:j]表示s的前缀子串,s[j:i]表示s的后缀子串。如果s[0:j]可以被拆分成由wordDict中的单词组成的子串,并且s[j:i]也在wordDict中,那么就可以将dp[i]设置为true。最后,返回dp[s.size()]表示整个字符串s是否可以被wordDict中的单词拼接而成。

1.动态规划

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

推荐阅读更多精彩内容