139. 单词拆分
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
auto wordDictSet = unordered_set <string> ();
for (auto word: wordDict) {
wordDictSet.insert(word);
}
auto dp = vector <bool> (s.size() + 1);
dp[0] = true;
for (int i = 1; i <= s.size(); ++i) {
for (int j = 0; j < i; ++j) {
if (dp[j] && wordDictSet.find(s.substr(j, i - j)) != wordDictSet.end()) {
dp[i] = true;
break;
}
}
}
return dp[s.size()];
}
};
java版:
public class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
Set<String> wordDictSet = new HashSet(wordDict);
boolean[] dp = new boolean[s.length() + 1];
dp[0] = true;
for (int i = 1; i <= s.length(); i++) {
for (int j = 0; j < i; j++) {
if (dp[j] && wordDictSet.contains(s.substring(j, i))) {
dp[i] = true;
break;
}
}
}
return dp[s.length()];
}
}
该代码实现了一个解决方案,使用动态规划方法检查给定字符串是否能通过字典中的单词进行拆分。在C++和Java版本中,首先创建一个词典集合,然后构造一个布尔型动态规划数组,遍历字符串,如果可以从已拆分的部分形成新的单词,则更新dp数组。最后返回dp数组的最后一个元素,表示字符串是否可拆分。
614

被折叠的 条评论
为什么被折叠?



