2020-04-02 刷题1(字符串)
2020-04-06 本文已影响0人
nowherespyfly
字符串的全排列
用set去重。
全排列用dfs来做,将当前字符串分为两部分,第一部分是第一个字符,其子问题为将第一个字符后面的所有字符(包括第一个字符)与当前字符交换,这样就确定了第一个字符,然后再递归的对第二个字符进行确定。
class Solution {
public:
set<string> all_permute;
void get_permute(string s, int idx){
if(idx == s.size() - 1) {
all_permute.insert(s);
return;
}
for(int i = idx; i < s.size(); i++){
string tmp = s;
swap(tmp[idx], tmp[i]);
get_permute(tmp, idx+1);
}
}
vector<string> permutation(string s) {
get_permute(s, 0);
vector<string> ret_permute;
set<string>::iterator iter = all_permute.begin();
for(; iter != all_permute.end(); iter++)
ret_permute.push_back(*iter);
return ret_permute;
}
};