給出了一個單詞列表,並給出了一個更大的字符串,我們如何找到該字符串是否是較小字符串的置換。是字符串字符串列表的排列
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