【剑指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;
    }
};

 

全部评论

相关推荐

12-24 20:49
武汉大学 Java
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
用微笑面对困难:你出于礼貌叫了人一声大姐,大姐很欣慰,她真把你当老弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务