面试题 08.08. 有重复字符串的排列组合-快速排序+回溯深度优先搜索
面试题 08.08. 有重复字符串的排列组合+快速排序加回溯深度优先搜索
有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。
示例1:
输入:S = “qqe”
输出:[“eqq”,“qeq”,“qqe”]
示例2:
输入:S = “ab”
输出:[“ab”, “ba”]
这题是需要进行快速排序的,因为为了方便我们在后面进行字符串构造时防止再同一个位置使用多个相同的字符构造,这一题还是很难的,并且很经典,感兴趣可以好好学习一下
解题代码如下:
/*** Note: The returned array must be malloced, assume caller calls free().*/void quick(char *a,int low,int high){if(low<high){int l=low,h=high;char p=a[low];while(low<high){while(low<high&&a[high]>=p){high--;}a[low]=a[high];while(low<high&&a[low]<=p){low++;}a[high]=a[low];}a[low]=p;quick(a,l,low-1);quick(a,low+1,h);}
}
int size;
void dfs(char *s,char **re,char *st,int length,int now_length,int *r){if(now_length==length){re[size]=(char *)malloc(sizeof(char )*(length+1));for(int i=0;i<length;i++){re[size][i]=st[i];}re[size][length]='\0';size++;}else{char pre='1';for(int i=0;i<length;i++){if(r[i]==1){if(s[i]!=pre){pre=s[i];r[i]=0;st[now_length]=s[i];dfs(s,re,st,length,now_length+1,r);r[i]=1;}}}}}char** permutation(char* S, int* returnSize){int length=strlen(S);int *r=(int *)malloc(sizeof(int )*length);char *st=(char *)malloc(sizeof(char )*length);char **re=(char **)malloc(sizeof(char *)*length*length*length*length);quick(S,0,length-1);for(int i=0;i<length;i++){r[i]=1;}size=0;char pre='1';for(int i=0;i<length;i++){if(r[i]==1){if(S[i]!=pre){pre=S[i];r[i]=0;st[0]=S[i];dfs(S,re,st,length,1,r);r[i]=1;}}}*returnSize=size;return re;}
面试题 08.08. 有重复字符串的排列组合-快速排序+回溯深度优先搜索相关推荐
- 程序员面试金典 - 面试题 08.07. 无重复字符串的排列组合(回溯)
1. 题目 无重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同. 示例1:输入:S = "qwe"输出:["qwe", & ...
- leetcode面试题 08.08. 有重复字符串的排列组合(回溯)
有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe" 输出:["eqq","qeq",&q ...
- 面试题 08.08. 有重复字符串的排列组合
面试题 08.08. 有重复字符串的排列组合 有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe"输出:["eqq&qu ...
- 【亡羊补牢】挑战数据结构与算法 第18期 LeetCode 面试题 08.08. 有重复字符串的排列组合(递归与回溯)
仰望星空的人,不应该被嘲笑 题目描述 有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe"输出:["eqq", ...
- 无重复字符串的排列组合
无重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同. 示例1: 输入:S = "qwe" 输出:["qwe", " ...
- JAVA练习177-有重复字符串的排列组合
有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe" 输出:["eqq","qeq", ...
- java字符串字符排列组合_如何在Java中查找字符串的所有排列
java字符串字符排列组合 In this tutorial, we will learn how to find the permutation of a String in a Java Prog ...
- 数据结构与算法--字符串的排列组合问题
字符串的全排列 题目:输入一个字符串,打印出改字符串中所有字符的所有排列.例如输入字符串abc,那么打印出由a,b,c字符组成的所有字符串:abc,acb,bac,bca,cab,cba 如何求解全排 ...
- 字符串所有排列组合暴力递归
给你一个字符串"acb",可以打印出六种排列组合,这里又是一种index推动的递归,但是这里有一些小trick,就是从第一个开始,在后面的字符串的每一个字符进行交换,这样就可以省很 ...
最新文章
- 打不开_网页打不开,怎解?
- 数字图像处理:(5)非微分算子在数字图像处理中的应用
- Linux 查看软件位置的命令
- Es-nested嵌入式属性
- php和openresty效率,openresty say_hello 性能测试
- Rows Over Window与Range Over Window的区别
- FZU Problem 2238 Daxia Wzc's problem
- iOS绘图系列四:绘制文字和图像CGContextDrawImage,drawInRect:,drawAtPoint:, UIGraphicsBeginImageContext...
- 计算机应用基础10000字论文,计算机应用毕业设计论文一万字.docx
- mysql表空间自增_Oracle 默认表空间问题及自增变量设置
- Manual Create Database OMF
- 用MDT 2012为企业部署windows 7(三)--安装MDT 2012,ADK以及安装后情况
- 跟兄弟连学PHP PDF 分享
- 开心斗服务器维修要多久,大危机 《开心OL》史上最惨服务器开启?
- 严重: Unable to set localhost. This prevents creation of a GUID. Cause was: springtest: springtest
- C语言(苏小红)——第二章基本数据类型
- 逻辑题练习-if-for-数组
- 白鹭引擎拉伸高度_白鹭引擎推出LakeShore:无需编程的游戏创作工具
- 如何利用业余时间学习Python,有没有比较完整的规划。。
- 数据库系统概论(第四版)习题解答