什么是子序列?
例如字符串str = 'abc',那么它就可以选择一个位置要还是不要。
要a:
要b:
要c: abc
不要c:ab
不要b:
要c:ac
不要c:a
不要a:
要b:
要c:bc
不要c:b
不要b:
要c:c
不要c:''
综上:str的子序列有:【abc,ab,ac,a,bc,b,c,''】
代码:
public class Class1 {
public static void main(String[] args) {
String s = "abc";
char[] chars = s.toCharArray();
List<String> sequences = new ArrayList<String>();
getSequences(chars,0,sequences,"");
for (String sequence : sequences) {
System.out.println("sequence = " + sequence);
}
}
/**
* 获取一个字符串的所有子序列
* @param chars 字符串变成一个个的字符
* @param position 当前在哪个位置
* @param sequences 存放所有的子序列
* @param path 一个完整的子序列
*/
private static void getSequences(char[] chars,int position,List<String> sequences,String path){
if(position == chars.length){
sequences.add(path);
return;
}
//当前这个位置要还是不要
//1.要
String varString = path + chars[position];
getSequences(chars,position+1,sequences,varString);
//2.不要
getSequences(chars,position+1,sequences,path);
}
}