Solution1:我的答案,也是递归,思路类似于9.4求集合的子集
针对字符串的全排列问题,这个思路就挺好的,清晰易懂!
其他解法在LeetCode46:https://blog.csdn.net/Allenlzcoder/article/details/80271771 和LeetCode47:https://blog.csdn.net/Allenlzcoder/article/details/80275707 中进行了详细总结。
class Permutation {
public:
vector<string> getPermutation(string A) { //依据题意,有重复的英文字符但不合并
// write code here
vector<string> res;//存放最终结果
if(A.size() == 0)
return res;
else if(A.size() ==1 ) {
res.push_back(A);
return res;
}
string temp_str1(1, A[0]);
res.push_back(temp_str1);
for (int i = 1; i < A.size(); i++) {
string temp_str2(1, A[i]);
int a = res.size();
for (int j = 0; j < a; j++) {
for(int k = 0; k <= res[j].size(); k++) {
if(k == res[j].size())
res.push_back(res[j] + temp_str2);
else
res.push_back(res[j].substr(0, k) + temp_str2 + res[j].substr(k));
}
}
res.erase(res.begin(), res.begin() + a);
}
sort(res.begin(), res.end(), my_compare);
return res;
}
static bool my_compare(string a, string b) {
if(a > b)
return true;
else
return false;
}
};