字符全排列

Posted beaglebone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符全排列相关的知识,希望对你有一定的参考价值。

问题一:对字符串s,输出字符串S中字符的所有排列。例如:输入字符串"abc",其全排列是abc,acb,bac,bca,cab,cba;

方法一:这是一个深度优先搜索的过程。

void dfs(vector<string> &result,string & path,string s,int len)
{
    if(len==s.size())
    {
        result.push_back(path);
        return;
    }
    for(int i=0;i<s.size();i++)
    {
        if(path.find(s[i])==-1)
        {
            path.push_back(s[i]);
            dfs(result,path,s,len+1);
            path.pop_back();
        }
    }
}
int main()
{
    string str="abc";
    vector<string> result;
    string path;
    dfs(result,path,str,0);
}

方法二:递归的过程:首先求所有可能出现在第一个位置的字符,也就是把第一个字符与后面的所有字符交换。其次,固定第一个字符,求后面字符的全排列,也就是把第二个字符与后面的所有字符交换。一直递归下去。

void permutation(char *s,char *sbegin)
{
    if(*sbegin==\0)
        cout<<s<<endl;
    else
    {
        for(char *p=sbegin;*p!=\0;p++)
        {
            swap(*sbegin,*p);
            permutation(s,sbegin+1);
            swap(*sbegin,*p);
        }
    }
}
int main()
{
    char s[]="abc";
    permutation(s,s);
}

技术分享

 

以上是关于字符全排列的主要内容,如果未能解决你的问题,请参考以下文章

最强解析面试题:字符串全排列「建议收藏!」

递归 - 求数字/字符串的全排列

面试题:字符串的全排列

字符串的全排列

20160213.CCPP体系详解(0023天)

算法——全排列