字符串的排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
代码
class Solution {
string str;
vector<string> ans;
unordered_map<int, int> mp;
unordered_map<char, int> hash;
public:
void hashCalc() {
for (int i = 0, k = 1; i < str.size(); ++i) {
if (hash.find(str[i]) == hash.end()) {
hash[str[i]] = k++;
}
}
}
vector<string> Permutation(string str) {
if (str.size() > 0) {
this->str = str;
hashCalc();
dfs(0, 0);
}
return ans;
}
void dfs(int p, int tag) {
if (mp.find(tag) != mp.end()) {
return;
}
mp[tag] = 1;
if (p >= str.size()) {
ans.push_back(str);
}
//因为swap只交换一次,str会改变,所以需要记住交换前的,从而不影响下一轮操作,关键
string tmp = str;
for (int i = p; i < str.size(); ++i) {
swap(str[p], str[i]);//只交换一次,后面不再交换回来,保证每次交换str[p+1,n]子串都是从最小的先开始
dfs(p + 1, 10 * tag + hash[str[p]]);
}
str = tmp;
}
};
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战