140. Word Break II(hard)
欢迎fork and star:Nowcoder-Repository-github
140. Word Break II
题目:
 Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, add spaces in s to construct a sentence where each word is a valid dictionary word. You may assume the dictionary does not contain duplicate words.
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"].
UPDATE (2017/1/4):
The wordDict parameter had been changed to a list of strings (instead of a set of strings). Please reload the code definition to get the latest changes. 
解析
- unordered_set& dict办版本 
	//运行时间:4ms
	//占用内存:508k
class Solution {
	vector<string> combine(string word, vector<string> prev){
		for (int i = 0; i < prev.size(); ++i){
			prev[i] += " " + word;
		}
		return prev;
	}
public:
	vector<string> wordBreak(string s, unordered_set<string>& dict) {
		
		vector<string> result;
		if (dict.count(s)){ //a whole string is a word
			result.push_back(s);
		}
		for (int i = 1; i < s.size(); ++i){
			string word = s.substr(i);
			if (dict.count(word)){
				string rem = s.substr(0, i);
				vector<string> prev = combine(word, wordBreak(rem, dict));
				result.insert(result.end(), prev.begin(), prev.end());
			}
		}
		
        reverse(result.begin(), result.end());
		return result;
	}
};
- 暴力超时
namespace test
{
	vector<string> wordBreak(string s, unordered_set<string> &dict) {
		//暴力搜索,不能ac,复杂度超了。
		vector<string> res;
		int size = s.length();
		for (int i = 0; i < size; i++){
			string tmp = s.substr(0, i + 1);
			if (dict.count(tmp))
				findNext(res, s, dict, tmp, i + 1);
		}
		return res;
	}
	void findNext(vector<string> & res, string s, unordered_set<string> &dict, string tmp, int i){
		int size = s.length();
		if (i >= size){
			res.push_back(tmp);
			return;
		}
		for (int j = 1; j <= size - i; ++j){
			string now = s.substr(i, j);
			if (dict.count(now)){
				findNext(res, s, dict, tmp + ' ' + now, i + j);
			}
		}
	}
}
题目来源
    C/C++基本语法学习
STL
C++ primer
 
                    
                

 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号