单词拆分

题目

单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。

示例

image

解题思路

1.由题目可知我们需要判断集合中的单词是否可以将其组成我们目标字符串。
2.我们采用动态规划来解决这个问题。
3.我们dp[i]表示到字符串i是否可以成功。
4.确定动态方程: 字符串i至k区间字串,是否在目标单词中。
5.当位置在k的位置时,且dp[k] == true,i-k又是目标单词时,dp[k] = true.
6.将示例带入验证。

代码

class Solution {
public:
    
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
        vector<bool> dp(s.size()+1, false);
        dp[0] = true;
        for(int i = 1; i <= s.size(); i++){
            for(int k = 0; k < i; k++){
                string word = s.substr(k, i-k);
                if(wordSet.find(word) != wordSet.end() && dp[k] == true){
                    dp[i] = true;
                }
            }
        }
        return dp[s.size()];
    }
};
posted @ 2026-03-16 10:38  heyuikn  阅读(3)  评论(0)    收藏  举报