leetcode139单词拆分

leetcode139单词拆分_第1张图片

1.动态规划

定义dp[i]表示字符串s前i个字符组成的字符串s[0,...,i-1]能否被拆分为若干个字典中的单词。

对于任意j,0<=j

dp[i]==dp[j]&&func(s[j,...i-1])

即可以将s[0,...,i-1],分成s[0,...,j-1],s[j,...i-1].两个部分s1,s2,s1能否被拆分成字典中的单词是已经知道,只需要判断s2即可

代码如下:

class Solution {
public:
    bool wordBreak(string s, vector& wordDict) {
        int len=s.size();
        vector dp(s.size()+1, false);
        //dp[i]表示字符串前i个字符组成的字符串能否被分割
      set m(wordDict.begin(), wordDict.end());
      dp[0] = true;
      for (int i = 1; i <= s.size(); ++i){
        for (int j = 0; j < i; ++j){
            if (dp[j] && m.find(s.substr(j, i-j)) != m.end()){
                dp[i] = true;
                break;
            }
        }
    }
    return dp[s.size()];
    }
};

 

 

 

 

你可能感兴趣的:(leetcode139单词拆分)