字符串的所有子字符串合集

来源:互联网 发布:淘宝 红包密令 编辑:程序博客网 时间:2024/05/16 23:01

今天好友问到一个问题就是给定一个字符串要求输出它的所有的子字符串,如给定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){//补充前面的0int 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;}

0 0