题目:
给定一个字符串string A和其长度n,返回所有该字符串所包含字符的各种排列。要求输入字符串长度小于等于11且均为大写英文字符,排列中的字符串按字典序从大到小排序。(重复字符串不用合并)
解析:
感觉这道题不像是dp的,更像是回溯的。。
class Permutation {
public:
void permuDict(vector<string> &dict, string &A, int i, vector<int>mark, string loca)
{
mark[i] = 1;
loca += A[i];
if(loca.length() == A.length())
{
dict.push_back(loca);
return;
}
else
{
for(auto j = 0; j < A.length(); j++)
if(mark[j] == 0)
permuDict(dict, A, j, mark, loca);
}
}
vector<string> getPermutation(string A) {
// write code here
vector<string>dict;
vector<int>mark(A.length(), 0);
string str="";
for(auto i = 0; i < A.length(); i++)
permuDict(dict, A, i, mark, str);
sort(std::begin(dict), std::end(dict), [](string a, string b){return a>b;});
return dict;
}
};