zoukankan      html  css  js  c++  java
  • [LeetCode]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"].

    参考:http://blog.csdn.net/doc_sgl/article/details/13064739

    class Solution {
    public:
        void wordBreakHelper(string s,unordered_set<string> &dict,set<string> &unmatched,
    		int mn,int mx, vector<string> &path, vector<string> &res) {
    		int i = mx < s.length() ? mx : s.length();
    		for(; i >= mn ; i--)
    		{
    			string preffixstr = s.substr(0,i);
    			if(dict.find(preffixstr) != dict.end()){
    				path.push_back(preffixstr);
    				if(preffixstr.size() == s.size())
    				{
    					string tmp = path[0];
    					for(int i=1; i<path.size(); i++)
    						tmp+= " "+path[i];
    					res.push_back(tmp);
    				}
    				string suffixstr = s.substr(i);
    				if(unmatched.find(suffixstr) == unmatched.end())
    				{
    					int oldsz = res.size();
    					wordBreakHelper(suffixstr,dict,unmatched,mn,mx,path,res);
    					if(res.size() == oldsz)
    						unmatched.insert(suffixstr);
    				}
    				path.pop_back();
    			}
    		}
        }
    	vector<string> wordBreak(string s, unordered_set<string> &dict) {
            // Note: The Solution object is instantiated only once.
            vector<string> res;
    		if(s.size() < 1 || dict.empty()) return res;
    		unordered_set<string>::iterator it = dict.begin();
    		int maxlen=(*it).length(), minlen=(*it).length();
    		for(it++; it != dict.end(); it++)
    			if((*it).length() > maxlen)
    				maxlen = (*it).length();
    			else if((*it).length() < minlen)
    				minlen = (*it).length();
            set<string> unmatched;
    		vector<string> path;
    		wordBreakHelper(s,dict,unmatched,minlen,maxlen,path,res);
    		return res;
        }
    };
    

      

  • 相关阅读:
    get请求中文乱码问题
    JDBC
    SpringSecurity
    IDEA中创建项目
    Vue路由传参的几种方式
    vue-cli搭建与使用
    docker发布springboot项目
    css伪类的使用
    java实体类序列化与反序列化
    docker网络
  • 原文地址:https://www.cnblogs.com/Rosanna/p/3597249.html
Copyright © 2011-2022 走看看