字符串全排列【方法2:利用交换的思想】
2012-05-07 20:31
232 查看
优点:该方法易于理解,但无法移除重复的排列,如:s="ABA",会生成两个“AAB”。
方法2:利用交换的思想,具体见实例,但该方法不如方法1容易理解。
两种方法的生成结果:
?
方法2:利用交换的思想,具体见实例,但该方法不如方法1容易理解。
//方法2:利用交换的思想,具体见实例,但该方法不如方法1容易理解。 // //? #include <iostream> #include <string> #include <cstdio> using namespace std; void swap(char* x, char* y) { if(x==y) return; char tmp; tmp = *x; *x = *y; *y = tmp; } /* Function to print permutations of string This function takes three parameters: 1. String 2. Starting index of the string 3. Ending index of the string. */ void permute(char *a, int i, int n) { int j; if (i == n) printf("%s\n", a); else { for (j = i; j <= n; j++) { if(a[i] == a[j] && j != i) //为避免生成重复排列,当不同位置的字符相同时不再交换 continue; swap((a+i), (a+j));//a[i]<->a[j] permute(a, i+1, n); swap((a+i), (a+j)); //backtrack//a[i]<->a[j] } } } void permute_my(char *a, int i, int n) { int j; if (i == n) printf("%s\n", a); else { for (j = i; j <= n; j++) { if(a[i] == a[j] && j != i) //为避免生成重复排列,当不同位置的字符相同时不再交换 continue; //swap((a+i), (a+j));//a[i]<->a[j] char buff[256]; strcpy(buff,a); swap(&buff[i],&buff[j]);//buff[i]<->buff[j] permute_my(buff, i+1, n); //swap((a+i), (a+j)); //backtrack//a[i]<->a[j] } } } int main() { //method2 cout << "method2" << endl; char a[] = "ABA"; permute(a,0,strlen(a)-1); /////// printf("==========\n"); char b[] = "ABA"; permute_my(b,0,strlen(b)-1); return 0; }
两种方法的生成结果:
?
相关文章推荐
- 字符串翻转的两种方法(1:利用额外空间 2:交换)
- 各种字符串反转方法(异或交换法,递归方法,二分思想)
- 利用JS提高组合拼接字符串效率的方法
- 基本字符串压缩 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。
- 请借助Array内置对象的相关方法,实现字符串倒序排列
- 利用PHP脚本在Linux下用md5函数加密字符串的方法
- 初学c语言--Linux下的gets命令,对n个数的顺序排列 计算字符串里的单词数 n个数里取m的方法 杨辉三角
- Unity C# 使用反射,利用字符串作为泛型参数调用泛型方法。
- 利用数据库存储文本文件、图像文件需要的字符串读写方法备忘
- 利用二叉树的思想来实现分配和释放内存方法
- C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法
- [置顶] C# 如何利用反射,将字符串转化为类名并调用类中方法
- 利用冒泡排序的思想对符合格式的时间字符串进行排序
- 利用JS提高组合拼接字符串效率的方法(转)
- 给定一个字符串输出其全部排列的方法
- SQL SERVER 2005中利用XML对字符串拆分的方法
- 利用java类的思想和并查集的方法解决同一道算法题
- 利用PHP函数计算中英文字符串长度的方法
- 利用join的巧妙思想(分割字符串并存储到表格中――两种不同思想)
- Java利用剪贴板实现交换程序间数据的方法