【leetcode】word-break-ii

来源:互联网 发布:数据分析师需要考证吗 编辑:程序博客网 时间:2024/06/05 08:57

题目:

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"].




代码分析:
void _wordBreak(vector<string> &ret,string str,//表示的是要操作的字符串string &src,//表示的题目给的字符串int idex,///当前的字符串走到哪个位置unordered_set<string> &dict,set<int>& size){//表示已经走完了if(idex == src.size()){if(str.size() != 0)ret.push_back(str);return  ;}//要是当前的字符串为不为空的话,那么在尾部加上空格 if(idex != 0)str.push_back(' ');set<int>::iterator len = size.begin();for(; len!= size.end();++len){int i= *len;if(idex + i > src.size()||i==0)break;string  tmp((char*)src.c_str()+idex,(char*)src.c_str()+idex+i);unordered_set<string>::iterator it  = dict.find(tmp);        if(it != dict.end())_wordBreak(ret,str+tmp,src,idex+i,dict,size);}}vector<string> wordBreak(string s, unordered_set<string> &dict) {vector<string> ret;if(s.size() == 0||dict.empty() == true)return ret;unordered_set<string>::iterator it  = dict.begin();set<int> size;while(it!= dict.end()){size.insert(it->size());++it;}string  str;_wordBreak(ret,str,s,0,dict,size);return ret;}





0 0