首页 > 其他 > 详细

[LintCode] Word Break

时间:2015-10-04 11:09:22      阅读:305      评论:0      收藏:0      [点我收藏+]

Given a string s and a dictionary of words dict, determine if s can be break into a space-separated sequence of one or more dictionary words.

Example

Given s = "lintcode", dict = ["lint", "code"].

Return true because "lintcode" can be break as "lint code".

Solution: 

DP.

bool wordBreak(string s, unordered_set<string> &dict) {
        int len = s.size();
        if(len == 0) return true;
        
        int min_len = INT_MAX, max_len = INT_MIN;
        for (auto &ss : dict) {
            min_len = min(min_len, (int)ss.length());
            max_len = max(max_len, (int)ss.length());
        }
        
        vector<int> breakIdx;
        breakIdx.push_back(-1);
        
        for(int i = 0;i < len;++i){
            for(int j = breakIdx.size() - 1;j >= 0;--j){
                int idx = breakIdx[j];
                if(i - idx < min_len || i - idx > max_len)
                    continue;
                string str = s.substr(idx + 1, i - idx);
                if(dict.find(str) != dict.end()){
                    breakIdx.push_back(i);
                    break;
                }
            }    
        }
        return (*breakIdx.rbegin()) == (len - 1);
    }

 

[LintCode] Word Break

原文:http://www.cnblogs.com/changchengxiao/p/4854237.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!