leetcode 139. Word Break

leetcode 139. Word Break

题意:给你一个字符串,再给你一堆单词,问你字符串能不能用单词组成。

字符串长度,单词个数都没有给出来,没给就没给,直接暴力来一发。


把[0,i]分成[0,j],[j+1,i]两部分,如果[0,j]能找到,[j+1,i]能找到,那肯定能找到啦!然后直接在单词字典找就好啦!

对于第一部分,直接用dp[]记录状态,1表示找到,0表示没有找到。

对于第二部分,用j表示分界点,word的范围就是[j+1,i],也就是substr(j+1,i-j),用find()直接在字典里面找第二部分的单词。

over!

这里有个细节要注意,就是字符串是从0开始,那么dp[0]=1,不是空字符串能找到,而是第一个字符能找到。

所以往原字符串前面加个' '就好了,dp[0]=1就完美了。

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict)
    {
        if (wordDict.size() == 0) return false;

        string ss = " " + s;
        int len = ss.size();
        vector<bool> dp(len+1,false);

        dp[0] = true;
        for (int i = 1; i < len; i++)
        {
            for (int j = i-1; j >= 0; j--)
            {
                if (dp[j])
                {
                    string subword = ss.substr( j+1 , i - j );
                    if (find(wordDict.begin(), wordDict.end(), subword) != wordDict.end())
                    {
                        dp[i] = true;
                        break;
                    }
                }
            }
        }
        return dp[len-1];
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simon|

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值