public class BinaryAlgorithm {
/**
* 在linux系统中 1,2,4分别代表 执行,写入,读取
* 实际上是二进制中
* 0001
* 0010
* 0100
* 可以看出任意非空子集的和 各不相同
* 利用这样的特性可以计算 一个集合的子集
*/
public List<String> getStrSubstringSet(String str){
List<String> result = new ArrayList<String>();
char[] chars = str.toCharArray();
int length = chars.length;//字符串长度
int countStr = 2<<length - 1;//有多少非空子集
for (int i = 1; i <= countStr; i++) {
String binaryString = Integer.toBinaryString(i);//把子集个数转化为二进制
int zeroCount = length - binaryString.length();
for (int j = 0; j < zeroCount; j++) binaryString = "0"+binaryString;//把长度补齐和字符长度一致
char[] binaryStr = binaryString.toCharArray();//二进制的字符串
StringBuilder sb = new StringBuilder();
for (int j = 0; j < binaryStr.length; j++) {
if(binaryStr[j]=='1') sb.append(str.charAt(j));//如果这里是1的话就记录下来
}
result.add(sb.toString());
}
return result;
}
public static void main(String[] args) {
BinaryAlgorithm ba = new BinaryAlgorithm();
System.out.println(ba.getStrSubstringSet("abcd"));
}
}