【剑指offer】字符串的排列

题目描述

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

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

思路

全排列,因为可能有重复的字符,因此需要将全排列中重复的排列去掉,并按字典序排序。

代码

class Solution {
public:
    void dfs(int k,string s,vector<string> &vec,int len){
        if(k == len){
            vec.push_back(s);
        }
        for(int i = k; i < len; i++){
            swap(s[i],s[k]);
            dfs(k+1,s,vec,len);
            //回溯
            swap(s[i],s[k]);
        }
    }
    vector<string> Permutation(string str) {
        vector<string> vec;
        int len = str.length();
        if(len == 0){
            return vec;
        }
        dfs(0,str,vec,len);
        sort(vec.begin(),vec.end());//排序
        auto it = unique(vec.begin(),vec.end());//删除重复元素
        vec.resize(distance(vec.begin(),it));//重新赋值
        return vec;
    }
};

 

全部评论

相关推荐

喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
我见java多妩媚:大外包
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务