字符串的所有子字符串合集
2015-10-01 10:42
190 查看
今天好友问到一个问题就是给定一个字符串要求输出它的所有的子字符串,如给定abc,子字符串含有a、b、c、ab、bc、ac、abc;下面给出两种解决方案。
第一种是基于递归来实现的。
第一种是基于递归来实现的。
public static Set<String> pinjie(Set<String>all,Set<String>s,String str) { for(int i =0 ;i<s.size();i++) { all.add(str+s.toArray()[i]); } all.addAll(s); return all; } public static Set<String> getAll(String str) { Set<String> s = new TreeSet<String>(); if(str.length()==1) { s.add(str); return s; }else{ String first = str.substring(0,1); String remainStr = str.substring(1); s.add(first); return pinjie(s,getAll(remainStr),first); } }第二种思想是朋友想出来的,想法挺不错。就是利用字符串中字符的位置,如果该位置上有的话,就是1,没有就是0.对于给定的字符串,求出其长度,那么它所有的组合就是从0到2的str.length()-1次方。
public static Set<String> getAll2(String str) { Set<String> s = new TreeSet<String>(); int length = str.length(); char c[] = str.toCharArray(); for(int i = (int) (Math.pow(2, length)-1);i>0;i--) { String binaryStr = Integer.toBinaryString(i); if(binaryStr.length()<length) { //补充前面的0 int addZeroNum = length-binaryStr.length(); String zeroStr = ""; for(int k = 0;k<addZeroNum;k++) { zeroStr+="0"; } binaryStr = zeroStr+binaryStr; } System.out.println(binaryStr); String subStr = ""; for(int j = 0;j<binaryStr.length();j++) { if(binaryStr.subSequence(j, j+1).equals("1")) { subStr +=c[j]; } } s.add(subStr); } return s; }
相关文章推荐
- javaAPI文档翻译之Java.awt.BorderLayout
- java.io.IOException: Type mismatch in key from map: expected
- 与 Gloria Victis磨练你的技能, 真实中世纪开放世界的MMORPG
- python批量下载兰科植物网站的图片,并重命名文件
- 笔试
- 01.TypeScript 基本类型
- nginx的多站设置
- 类的继承
- Reverse Nodes in k-Group
- C实现线程池
- HDU 4407 Sum
- Java中序列化的serialVersionUID作用
- 美国政府发布官网新设计标准,从此不再丑
- 国外安卓开源ui集合
- typename的用法
- Robotium 介绍
- java获取当前的系统
- 谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
- zeromq源码分析–TCP连接处理流程
- test9.19