给出了一个单词列表,并给出了一个更大的字符串,我们如何找到该字符串是否是较小字符串的置换。是字符串字符串列表的排列
EG-s= badactorgoodacting dict[]={'actor','bad','act','good'] FALSE
EG-s= badactorgoodacting dict[]={'actor','bad','acting','good'] TRUE
较小的话本身并不需要进行置换。现在的问题是,我们是否能找到小串的排序,例如,如果级联的顺序它提供了较大的字符串
下一个约束 - 从dict[]
一些话也可以留下未使用的
下面给出复杂性O(n2)。任何其他方式来做到这一点......以提高复杂度或提高总体效率?大部分在Java中。提前致谢!
bool strPermuteFrom(unordered_set<string> &dict, string &str, int pos)
{
if(pos >= str.size())
return true;
if(dict.size() == 0)
return false;
for(int j = pos; j < str.size(); j++){
string w = str.substr(pos, j - pos + 1);
if(dict.find(w) != dict.end()){
dict.erase(w);
int status = strPermuteFrom(dict, str, j+1);
dict.insert(w);
if(status){
if(pos > 0) str.insert(pos, " ");
return status;
}
}
}
return false;
}
bool strPermute(unordered_set<string> &dict, string &str)
{
return strPermuteFrom(dict, str, 0);
}
为您修复了标签,将来请注意您使用的标签 – 2016-11-18 16:24:20
@RC。我在这个问题中阅读了“大部分以Java编程”,因此C++代码可能只是错误语言现有解决方案的一个例子。最好让用户澄清而不是切换标签。 – grek40
也许可能不是,目前这里没有Java,如果问题是如何将此代码转换为更优化的Java版本,那么它可能太宽了 – 2016-11-18 16:33:18