题解 | 字符串的排列

字符串的排列

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;
    }

};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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