思路:
不重复字符的字符串,对字符进行遍历, 回溯解决。结果又N!种情况
含有重复的字符串,普通做法N!种情况肯定不对。比如aa的全排列只有一种。
所以此时不能对字符串进行遍历,而是字符的词频进行遍历,如果词频字符的词频大于0, 就可以用。
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
string s;
map<char, int> cnt;
vector<char> v;
void f(int n)
{
if (n == s.length())
{
for (int i = 0; i < v.size(); i++)
{
cout << v[i];
}
putchar(10);
}
else
{
for (map<char, int>::iterator it = cnt.begin(); it != cnt.end(); it++)
{
if (it->second > 0)
{
it->second--;
v.push_back(it->first);
f(n + 1);
v.pop_back();
it->second++