string全排列
来源:互联网 发布:张亮中餐厅知乎 编辑:程序博客网 时间:2024/05/23 02:03
字符串全排列
规则
最简单的思路就是使用递归实现:
将最左边字符固定,后面的依次全排
上一步的依次安排实际上是一次小集合的字符串全排
将次左边字符固定,剩下的全排
将此次左边固定…
直到最后一个数
第一轮结束,将原始字符串的最左边字符与次左边字符交换位置
按照上面的顺序依次进行
将原始字符串从左数第3位固定到最左边
依次进行
…直到左右进行完毕输出
实例
举例来讲:原是字符串为’abc’
a固定,剩下两个准备全排
剩下的两个中b固定,剩下的全排
只剩下一个字符,完成一次输出
一次递归后返回上一步,将c固定
剩下b全排,输出
a固定的虽有结果输出完毕
将b或c固定到首位
按照上面顺序进行全排
实现
#include <iostream>#include <cstring>using namespace std;void callFunc(char * str,int from,int to){ if(to<=1) return ; if(from==to){ for(int i=0;i<strlen(str);i++) cout<<str[i]; cout<<'\n'; } else{ for(int i=from;i<to;i++){ swap(str[from],str[i]); callFunc(str,from+1,to); swap(str[i],str[from]); } }}int main(){ char s[]={'a','b','c','d','\0'}; callFunc(s,0,strlen(s)); return 0;}
上面要注意的是,char s[]={'a','b','c','d'}
,当使用strlen函数计算字符数组长度是总是输出错误数值11,发现strlen函数使用的查询’\0’字符数组,上面字符数组没有字符串结尾字符,所以函数越界。或者可以直接使用string类型:
#include <iostream>#include <cstring>using namespace std;void callFunc(string str,int from,int to){ if(to<=1) return ; if(from==to){ for(int i=0;i<3;i++) cout<<str[i]; cout<<'\n'; } else{ for(int i=from;i<to;i++){ swap(str[from],str[i]); callFunc(str,from+1,to); swap(str[i],str[from]); } }}int main(){ string xxx ="abc"; cout<<xxx.size()<<endl; callFunc(xxx,0,3); return 0;}
StringBuilder sb=new StringBuilder(str); public String swap(String str,int x,int y){ char t=sb.charAt(x); char v=sb.charAt(y); sb.setCharAt(x, v); sb.setCharAt(y, t); return sb.toString() ; }public void strfunc(String str,int from ,int to){ if(from==to){ System.out.println(str); return; } for(int i=from;i<to;i++){ str=swap(str, i, from); strfunc(str, from+1, to); str=swap(str, i, from); } }
0 0
- string全排列
- string练习 全排列
- 对string 全排列算法
- Java写String的全排列
- 转载--Java写String的全排列
- 全排列:String:Permutation using C++
- Recursion 字符串的全排列 String Permutation @CareerCup
- List内部元素全排列--以String为例
- 全排列 和 C++ string类 NYOJ 19
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- 全排列
- Mybatis插件原理分析(一)
- py2-3
- tcp/ip学习心得(2)
- MFC 字符(串)间的转换
- Git使用之路
- string全排列
- Linux命令 --- 查找筛选grep
- C# 中用 PadLeft、PadRight 补足位数
- Selenium模拟选课
- How to fix exception: Failed to instantiate SLF4J LoggerFactory?
- iOS 网络编程大小端格式
- mysql:GTID复制切换成传统复制
- 校园网一键登录注销
- structs2如何获取web资源