虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

您现在的位置是:首页 > 技术阅读 >  每日一题:无重复字符串的排列组合

每日一题:无重复字符串的排列组合

时间:2024-02-14


题目:无重复字符串的排列组合



无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。

示例1
 输入:S = "qwe"
输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]

示例2

 输入:S = "ab"
输出:["ab", "ba"]


提示:

  • 字符都是英文字母。

  • 字符串长度在[1, 9]之间。

分析

经典的回溯问题,题目要求字符串的每个字符都不相同,我刚开始认为输入字符串可能有重复的字符,所以加个段去重的代码,最后提交时候发现不去重也可以测试通过。

代码

class Solution {
public:
vector<string> permutation(string S) {
{// 多余的
sort(S.begin(), S.end());
auto it = std::unique(S.begin(), S.end());
S.resize(std::distance(S.begin(), it));
}
string path;
used.resize(S.size(), false);
dfs(S, path);
return ret;
}

vector<string> ret;
vector<bool> used;
void dfs(string& S, string& path) {
if (path.size() == S.size()) {
ret.push_back(path);
return;
}

for (int i = 0, size = S.size(); i < size; ++i) {
if (used[i]) continue;
used[i] = true;
path.push_back(S[i]);
dfs(S, path);
used[i] = false;
path.pop_back();
}
}

};


更多精彩推荐,请关注我们


代码精进之路


  代码精进之路,我们一起成长!