【剑指Offer】字符串的排列
发布日期:2022-02-10 08:55:15 浏览次数:29 分类:技术文章

本文共 1165 字,大约阅读时间需要 3 分钟。

题目

输入一个字符串,打印出该字符串中字符的所有排列。

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

示例:

输入:s = "abc"

输出:["abc","acb","bac","bca","cab","cba"]

思路

先使用书上的方法来进行排列

但是会出现重复,于是直接思路就是用set去重

但是可见非常耗时

于是对代码思路进行优化,注释如下

代码

class Solution {public:        vector
ret; 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【剑指Offer】序列化二叉树
下一篇:【剑指Offer】最小的k个数

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月04日 22时34分59秒