给定长度为N的字符串,输出其所有非空子序列,总共有2^N-1个子序列。
解题思路:
1.构造一颗树用于枚举所有子序列。
2.所有叶子节点的路径代表字符串的子序列。
3.左孩子代表对应的字符存在,右孩子代表对应的字符不存在。
4.给定字符串长度N,可知最左边的叶子结点的索引号是2^N - 1,最右边的叶子结点的索引则为2^(N + 1) -1。
5.给定任意结点M,可知其父结点的索引号为(M-1)/2。
import java.io.*;
class test
{
public static void main (String[] args) throws java.lang.Exception
{
traversalSubstrings("abc");
}
public static void traversalSubstrings(String s) {
int len = s.length();
int start = (1<
int end = (1<
for(int i = start;i < end;i ++) {
System.out.println(treeIndex2Substring(s, i));
}
return;
}
public static String treeIndex2Substring(String s, int index) {
StringBuilder sb = new StringBuilder();
int srcIndex = 0;
while(index >0) {
if(index % 2 != 0) {
//奇数,表示存在当前字符
sb.append(s.charAt(srcIndex ++));
}
else {
//偶数,表示不存在当前字符
srcIndex ++;
}
index = (index - 1)/2;
}
return sb.toString();
}
}