LeetCode 139. 单词拆分(动态规划)

@TOC

原题

LeetCode 139. 单词拆分

思路

  • 动态规划
  • 用一个集合存储word字典里的所有word,用一个动态数组存储s字符串从[0,i]的子字符串是否能用字典拼出。这里dp[0]为true,[0,i]这个字符串存在的条件就是 这个区间里dp[j]为true,且字典里存在[j,i]这个字符串,这里的j是[0, i]中的值。

代码

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
        int sl = s.length();
        auto dp = vector<bool> (sl+1, false);
        dp[0] = true;
        for (int i = 1; i <= sl; 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[sl];
    }
};

运行截图

LeetCode 139. 单词拆分(动态规划)_第1张图片

收获

你可能感兴趣的:(leetcode,动态规划,算法)