2021/3/20算法题打卡-不同子串
不同子串
题目
不同子串
本题总分:5 分
【问题描述】
一个字符串的非空子序列是指字符串中长度至少为 1 的一段字符组成 的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。 注意在计算时,只算本质不同的串的个数。 请问,字符串0100110001010001 有多少个不同的非空子序列?
分析
子序列比较难求,我们可以先求出所有的1位、2位到所以位的情况,然后判断是否重复(使用Set自动去重),使用递归求所以情况,递归传入总位数,和现在要得到的字符下标,后面的字符必须全部在此下标之后,将得到的字符传入一个全局变量StringBuffer中,递归回退的时候,删掉
代码
package com.blueBrageCup.B2019;
import java.util.HashSet;
import java.util.Set;
/**
* @auther thk
* @date 2021/3/23 - 8:56
*/
public class T2不同子串 {
static String s = "0100110001010001";
static Set<String> set = new HashSet<>();
static StringBuffer str = new StringBuffer();
private static void f(int k,int f) {
char c = s.charAt(f);
str.append(c);
if(k==str.length()){
set.add(str.toString());
str.deleteCharAt(str.length()-1);
return;
}
for(int i=f+1;i<16;i++){
f(k,i);
}
}
public static void main(String[] args) {
for(int i=1;i<=s.length();i++){
for(int f=0;f<16;f++){
f(i,f);
str.delete(0,str.length());
}
str.delete(0,str.length());
}
System.out.println(set.size());
}
}

浙公网安备 33010602011771号