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




代码分析:
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;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值