[leetcode] 140.Word Break II

题目:
Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word.

Return all such possible sentences.

For example, given
s = “catsanddog”,
dict = [“cat”, “cats”, “and”, “sand”, “dog”].

A solution is [“cats and dog”, “cat sand dog”].
题意:
给定一个字符串,和一个词典。查看这个字符串可以由字典中的词组成。
思路:
采用动态规划加回溯。扫描到某个字符j的时候,往前查看到i,看i到j构成的字符串是否在字典中,然后看从第一个字符到第i-1个字符能否由字典中单词组成,能的话,则前j个字符可以分为两个部分,第一部分是前i个字符,第二部分是i到j这段,这两段都可以由字典种单词形成。状态转移方程如下:

  • if(s.substr(i, j-i) in dictionary ) && DP[i] != NULL, DP[j].push_back(i)
    以上。
    代码如下:
class Solution {
public:
    vector<string> wordBreak(string s, unordered_set<string>& wordDict) {
        if (s.empty())return vector<string>();
        vector<vector<int>> DP(s.length() + 1, vector<int>());
        DP[0].push_back(-1);
        for (int i = 1; i <= s.length(); i++)
        for (int j = 0; j < i; j++) {
            if (!DP[j].empty() && wordDict.find(s.substr(j, i - j)) != wordDict.end()) {
                DP[i].push_back(j);
            }
        }
        vector<string> result;
        list<string> temp;
        getResult(s, result, temp, DP, s.length());
        return result;
    }
    void getResult(string &s, vector<string>& result, list<string>& temp, vector<vector<int>>& DP, int index) {
        if (index == 0) {
            string res = "";
            for (auto t : temp) {
                if(res != "")res = res + " " + t;
                else res = t;
            }
            result.push_back(res);
            return;
        }
        for (auto i : DP[index]) {
            temp.push_front(s.substr(i, index - i));
            getResult(s, result, temp, DP, i);
            temp.pop_front();
        }
    }
};
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值