class Solution {
public:
unordered_map<string, int> word_map;
void mapping(vector<string>& wordDict)
{
for(auto &a : wordDict)
word_map[a]++;
}
vector<string> ret;
// s: 原始字符串
// tmp: 已查询到的单词
// start: 此次查询起点的字符串中下标
void dfs(string s, vector<string> tmp, int start)
{
// 匹配完成,tmp中单词以此插入结果数组
if(start == s.size())
{
string str_tmp;
for(auto &a : tmp)
str_tmp += a + " ";
ret.push_back(str_tmp.substr(0, str_tmp.size() - 1));
return;
}
for(int i = start; i < s.size(); ++i)
{
string cur = s.substr(start, i - start + 1);
cout << cur << endl;
if(word_map.find(cur) != word_map.end())
{
cout << cur << endl;
tmp.push_back(cur);
dfs(s, tmp, i + 1);
// 回溯,继续找当前start开始更长的单词是否在wordDict中出现
tmp.pop_back();
}
}
}
vector<string> wordBreak(string s, vector<string>& wordDict) {
mapping(wordDict);
dfs(s, vector<string>(), 0);
return ret;
}
};
lc 140. 单词拆分 II
于 2024-01-08 12:52:02 首次发布
该代码定义了一个名为Solution的类,其中包含一个回溯算法函数wordBreak,用于在给定字符串`s`中查找并分解成wordDict中的单词。它首先构建词典映射,然后从每个可能的起始位置开始,递归地检查子串是否存在于词典中。

145

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



