欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

字符串排列

程序员文章站 2022-07-12 09:07:51
...

题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
class Solution {
public:
void change(string & str, int left, int right)
{
	char temp = str[left];
	str[left] = str[right];
	str[right] = temp;
}

void search(vector<string>& ans, string str, int begin, int end)
{
	if (begin == end)
	{
		ans.push_back(str);
		return;
	}
	for (int i = begin; i<end; i++)
	{
		if (i != begin&&str[i] == str[begin])
			continue;

		change(str, begin, i);		
		search(ans, str, begin + 1, end);
		change(str, begin, i);		
	}
	return;
}

vector<string> Permutation(string str) {
	vector<string> ans;
    if(str.size()<1)
        return ans;

    sort(str.begin(),str.end());  //预处理,便于剔除重复答案
	search(ans, str, 0, str.size());

    sort(ans.begin(),ans.end()); //指定输出顺序
	return ans;
}

};