您的位置:首页 > 其它

leetcode 139. Word Break

2018-03-08 09:53 411 查看
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];
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: