与Word Break II(参见这篇文章)相比,只需要判断是否可行,不需要构造解,简单一些。
依然是动态规划。
代码:
1 bool wordBreak(string s, unordered_set<string> &dict) { 2 int maxLen = 0; 3 for (auto w : dict) 4 maxLen = maxLen > w.length() ? maxLen : w.length(); 5 6 vector<bool> res(s.length() + 1, false); 7 res[s.length()] = true; 8 9 for (int i = s.length() - 1; i >= 0; i--) { 10 for (int l = 1; !res[i] && l <= maxLen && i + l <= s.length(); l++) 11 res[i] = dict.find(s.substr(i, l)) != dict.end() && res[i + l]; 12 } 13 14 return res[0]; 15 }