思想:
其实这个思想,我也不知道是不是动态规划的思想,因为,感觉这就是正常思维,保存当前字符之前的所有可能字符串,即当前字符为i,那么就要保存前i-1个字符形成的所有排列,然后将当前字符一次插入到这些排列中的每一个位置,然后形成新的排列。
class Solution {
public:
vector<string> Permutation(string str) {
vector<string> res;
string tmp="";
if(str.empty())return res;
res.push_back("a");
for(int i=1;i<str.size();i++){
int len=res.size();
while(len--){
tmp=res.front();
res.erase(res.begin());
for(int k=0;k<tmp.size();k++){
string t1=tmp.substr(0,k);
string t2=tmp.substr(k);
string t3=t1+str[i]+t2;
if(find(res.begin(),res.end(),t3)==res.end()){
res.push_back(t3);
}
while(k<tmp.size() && str[i]==tmp[k])k++;
}
if(tmp.back()!=str[i]){
string r=tmp+str[i];
if(find(res.begin(),res.end(),r)==res.end())
res.push_back(tmp+str[i]);
}
}
}
sort(res.begin(),res.end());
return res;
}
};