您的位置:首页 > 其它

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

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: