给定一个字符串s和一个单词dict的字典,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。
2017-10-03 09:48
801 查看
1 暴力破解 双重循环
vector<string> wordBreak(string s, unordered_set<string> &dict) {
vector<string> result;
if(s.length()==0)
return result;
for(int i=0;i<s.length();i++){
string strs;
for(int j=i;j<=s.length();j++){
string str=s.substr(i,j-i+1);
if(dict.count(str)){
strs+=str;
strs+=" ";
}
}
result.push_back(strs);
}
return result;
}
2 动态规划
用dp存储子串是否在 字典中
vector<string> wordBreak(string s, unordered_set<string> &dict) {
vector<string> result;
if(s.length()==0)
return result;
for(int i=0;i<s.length();i++){
string strs;
for(int j=i;j<=s.length();j++){
string str=s.substr(i,j-i+1);
if(dict.count(str)){
strs+=str;
strs+=" ";
}
}
result.push_back(strs);
}
return result;
}
2 动态规划
用dp存储子串是否在 字典中
class Solution { vector<bool> *dp; //存的字符串的子串是否在字典中 vector<string> mystring; vector<string> result; public: vector<string> wordBreak(string s, unordered_set<string> &dict) { dp=new vector<bool>[s.size()]; for(int i=0;i<s.size();i++){ for(int j=i;j<s.size();j++){ dp[i].push_back(match(s.substr(i,j-i+1),dict)); } } handleStr(s.size()-1,s); return result; } bool match(string str,unordered_set<string> &dict){ if(dict.count(str)) return true; return false; } void handleStr(int i,string s){ if(i==-1){//递归终止条件 string str; for(int j=mystring.size()-1;j>=0;j--){ str += mystring[j]; if(j!=0) str+=" "; } result.push_back(str); }else{ for(int k=0;k<=i;k++){ if(dp[k][i-k]){ mystring.push_back(s.substr(k,i-k+1)); handleStr(k-1,s); mystring.pop_back(); } } } } };
相关文章推荐
- 给定一个字符串s和一个单词dict的字典,确定s是否可以分割成一个或多个字典单词的空格分隔的序列。 s ="leetcode", dict =["leet", "code"].
- 2018阿里校招笔试——给定一个字符串S和有效单词的字典D,请确定可以插入到S中的最小空格数,使得最终的字符串完全由D中的有效单词组成,并输出解。
- 给定一个字符串,你需要颠倒一个句子中每个单词中的字符顺序,同时保留空格和初始单词顺序。
- 阿里校招笔试——给定一个字符串S和有效单词的字典D,请确定可以插入到S中的最小空格数,使得最终的字符串完全由D中的有效单词组成,并输出解。
- 字符串空格的压缩:给定一个字符串,将其中连续出现的空格压缩为1个后,将其中已空格分隔的每个字符串逆序打印出来
- 给定一个字符串列表,找出单词中最长单词,可以用l列表中的其他单词一次构建一个字符。返回具有最小字典顺序的最长单词。
- 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。 给定一个string stringA和一个string stri
- 每天一道LeetCode-----将字符串切分成若干单词,使得每个单词都在给定的字典中,求出所有的切分结果
- 给定一个有空格的字符串,求倒数第二个单词的长度
- 给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字。(原数组不必保留)
- 确定两串乱序同构 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。 给定一个string stringA和一个
- 编写一个程序,输入一串不超过60个字符组成的且不包含换行符的字符串,将字符串中的A到Z的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度相同,并且要求只对A到Z的字母重新排列,其
- 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。
- 给定一个字符串,你需要颠倒每个单词中的字符顺序,同时仍然保留空白和初始的字顺序。
- 给定两个字符串和一个字典,从头到尾找到最短变换序列的长度,使得:一次只能改变一个字符每个中间词必须存在于字典中
- 计算出一字符串(字符串中每个单词之间有一个或多个空格)中每个单词的 出现的次数
- 给出一句英文句子: "let there be light" 得到一个新的字符串,每个单词的首字母都转换为大写
- 给定一个只包含小写字母的字符串,删除重复的字母,每个字母只出现一次。在所有结果中,输出字典顺序最小的。
- 试编写一个程序,输入一个字符串,统计其中有多少各单词?单词之间用空格分开
- c语言给定一个英文句子,单词间用1个空格隔开,求单词个数