求字符串的子集
来源:互联网 发布:收据打印软件自定义 编辑:程序博客网 时间:2024/05/29 04:57
之前参加了一次面试的笔试考试,里面有一道:求字符串的子集,例如求1234的子串,有1,2,3,4,12,13,14,23,24,34,123,124,134,234,1234..,当时居然没想出怎么做,后面进入二面的时候,面试官问了笔试这道题现在觉得应该怎么做,很遗憾的是我笔试之后没有认真的思考,吸取这次教训,参考了网上的一些思路,利用递归是最简单的方法求出一个字符串所有的子集。
集合中的所有元素对于每一个子集来说,都有两种可能性:在子集中或是不在子集中。
各个元素的这两种可能性组合起来,组成了一个集合的所有子集。每一个集合都有2^n个子集。真子集则为:(2^n)-1
我们把元素这种在或不在子集中状态,放置在boolean数组中。
/** * 求1234的子串,例如:1,2,3,4,12,13,14,23,24,34,123,124,134,234,1234 * * 集合中的所有元素对于每一个子集来说,都有两种可能性:在子集中或是不在子集中。 * 各个元素的这两种可能性组合起来,组成了一个集合的所有子集。每一个集合都有2^n个子集。 * * 我们把元素这种在或不在子集中状态,放置在boolean数组中。 * @author c * */public class Test { private static void get_Subset(String str, int start, int end, boolean[] b) { // TODO Auto-generated method stub if(start==end){//当start==end时,即集合中的所有元素都已经在或者不在该子集中,输出该子集后,return跳出该层递归。 int i = 0; for(;i<end;i++){ if(b[i]){ System.out.print(str.charAt(i)); } } System.out.print(" "); return ; }else{ b[start] = false;//代表数组中索引为start的元素不在该子集中 get_Subset(str, start+1, end, b);//而后进入递归,元素索引向后加一,同样索引为start+1的元素也有在或者不在该子集中两种可能性 b[start] = true; get_Subset(str, start+1, end, b); } } public static void main(String[] args) { String str = "1234"; //我们把元素这种在或不在子集中状态,放置在boolean数组中。 boolean []b = new boolean[str.length()]; get_Subset(str,0,str.length(),b); }}
结果如下:
0 0
- 求字符串的子集
- 巧用递归求字符串的子集
- 求集合的子集
- 求子集的算法
- 求集合的子集
- 求集合的子集
- 求集合的子集
- 求集合的子集
- 求集合的子集
- 求集合的全部子集
- 求集合的所有子集
- 求集合子集的算法
- 求一组数的子集
- 求集合的所有子集
- 求一个集合的子集
- 求集合的所有子集
- 求数组的所有子集
- 求列表的所有子集
- 邻接多重表
- C++中static作用
- Android -- StateMachine解析
- PHP如何读取照片的exif信息
- Windows下使用Hadoop2.6.0-eclipse-plugin插件
- 求字符串的子集
- Log4J入门教程(一) 入门例程
- react demo2 (JSX入门)
- 锁的种类
- SVM处理mnist字体库
- RSA 数据加密解密
- Android日常错误-----app按home键,再次点击图标直接进入APP,以及APP保活问题
- Linux命令中Ctrl+z、Ctrl+c和Ctrl+d的区别和使用
- 猜神童年龄