【剑指Offer】字符串的排列
发布日期:2022-02-10 08:55:15
浏览次数:29
分类:技术文章
本文共 1165 字,大约阅读时间需要 3 分钟。
题目
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]思路
先使用书上的方法来进行排列
但是会出现重复,于是直接思路就是用set去重
但是可见非常耗时
于是对代码思路进行优化,注释如下
代码
class Solution {public: vectorret; vector permutation(string s) { if(s == ""){ return ret; } perm(s,0); //耗时严重 //set st(ret.begin(), ret.end()); //ret.assign(st.begin(), st.end()); return ret; } void perm(string& pStr,int pBegin){ if(pStr[pBegin] == '\0'){ ret.push_back(pStr); return; } for(int i = pBegin;pStr[i] != '\0';i++){ if (judge(pStr, pBegin, i)) continue; //优化,如果发现重复得了直接跳过这一个,反正后面还能再遇上,就交给后面处理 char tmp = pStr[i]; pStr[i] = pStr[pBegin]; pStr[pBegin] = tmp; perm(pStr,pBegin+1); tmp = pStr[i]; pStr[i] = pStr[pBegin]; pStr[pBegin] = tmp; } } bool judge(string& s, int start, int end) { for (int i = start; i < end; ++i) { if (s[i] == s[end]) return true; } return false; }};
转载地址:https://blog.csdn.net/hanmin822/article/details/105745230 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月04日 22时34分59秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
LeetCode-LCP 18. 早餐组合(Goland实现)
2021-06-30
医学小知识 - 近视一族不要从早到晚都戴眼镜
2021-06-30
Dataway - 解决 DataQL 返回数据单复数结构不一致情况
2021-06-30
CAD - CAD 的 *.dwl 是什么文件?可以打开吗?
2021-06-30
医学小知识 - 注意!疫苗接种第二针不能这样打
2021-06-30
微博 - 如何修改微博昵称?
2021-06-30
程序人生 - 原来大公司的LOGO是这样生产出来的~
2021-06-30
GaussDB - 浅析华为高斯GaussDB
2021-06-30
LeetCode(数据库)- 有趣的电影
2021-06-30
程序人生 - 猫咪为啥有“白袜子”
2021-06-30
IDM - 如何去除浏览器下载浮动条?
2021-06-30
LeetCode(数据库)- 变更性别
2021-06-30
JavaWeb - 简单聊聊 GZIP 的压缩原理与日常应用
2019-04-27
程序人生 - 库克:苹果收取 30% 佣金很合理!
2019-04-27
Redis - Spring Boot Redis 使用 msgpack 作为序列化
2019-04-27
医学小知识 - 午睡和不午睡的人,长期下来有什么区别?睡多久才健康?答案来了
2019-04-27
面经 - 数据库基础面试题
2019-04-27
LeetCode(数据库)- 员工奖金
2019-04-27
LeetCode(数据库)- 游戏玩法分析 III
2019-04-27