题解 | 字符串的排列

字符串的排列

https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7

#include <type_traits>
class Solution {
  //和全排列一样的思路
public:
    vector<string> ans;
    vector<string> Permutation(string str) {
        if(str.size() ==0)return {""};

        dp(str, 0);

        return ans;
    }

    void dp(string& str, int index){
        set<char> c;  //因为str中有重复的字符,在进行交换时会把相同的字符多次放到本位,所以用set集合,存储本位已经试过的字符,本位不能再使用了

        if(index == str.size()-1){
            ans.push_back(str);
        }

        for(int i = index; i < str.size(); ++i){
            if( c.count(str[i]) == 0){
                c.insert(str[i]);   //标记本位已经用过
                swap(str[i], str[index]);
                dp(str, index+1);
                swap(str[i], str[index]);
            }
        }

        return;
    }

};

全部评论

相关推荐

有没有佬投这个呀,怎么样呀求问
投递中科院空天信息创新研究院等公司7个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
07-09 20:50
门头沟学院 Java
码农索隆:1.教育背景和荣誉证书合二为一。 2.获奖项目理一遍,你做了什么,对你求职的岗位有什么帮助,没有就删掉。 3.技能特长和教育背景交换位置。 4.技能特长写的太差,上网上找简历参考。都不用问你别的,一个redis就能把你问住,写写你具体会redis哪些方面的知识。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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