题目
一个字符串的非空子串长度至少为 1 的连续的一段字符组成 的串。例如,字符串aaab 有非空子串 a,b,aa,ab,aaa,aab,aaab,一共7个,注意在计算时,只算本质不同的串个数,请问,字符串0100110001010001有多少不同的非空子串?代码
package com.hzc.bluecap;
import java.util.HashSet;
import java.util.Scanner;
public class ChildishString {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
String str= sc.next();
System.out.println(dislikeChildishString(str));
sc.close();
}
private static Integer dislikeChildishString(String str) {
// TODO Auto-generated method stub
HashSet<String> hs = new HashSet<>();
for (int i = 0; i < str.length(); i++) {
for (int j = 0; j <=str.length()-i; j++) {
System.out.println(str.substring(j, j+i));
hs.add(str.substring(j, j+i));
}
}
return hs.size();
}
}
思路
1.由题目可得到这是字符串的分解题目
2.通过1次for循环遍历字符串长度,第二次联合substring函数取值,用j-i来确定最终截至位置
3.然后存入hashset用hashset不存重复值的特性进行赛选
4.输出hashset长度也就是最终结果