lc 140. 单词拆分 II

该代码定义了一个名为Solution的类,其中包含一个回溯算法函数wordBreak,用于在给定字符串`s`中查找并分解成wordDict中的单词。它首先构建词典映射,然后从每个可能的起始位置开始,递归地检查子串是否存在于词典中。
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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值