试题 C: 不同子串 本题总分:10 分
【问题描述】
一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。 注意在计算时,只算本质不同的串的个数。 请问,字符串0100110001010001 有多少个不同的非空子串?
答案:100
题解:这道题涉及到字符串的分割,在java中substring(int,int)可以用于分割字符串,所以我们可以用两个for循环嵌套,将所有可能出现的字符串一个一个添加到list集合(list的长度是动态的,而数组的长度是固定的),最后加一个判断条件是否list中出现过这个字符串
解法一 List集合解法
public static void main(String[] args) {
String a="0100110001010001";
List<String> list = new ArrayList<String>();
for (int i = 0; i < a.length(); i++) {
for (int j = i+1; j <= a.length(); j++) {
if (!list.contains(a.substring(i,j))) {
list.add(a.substring(i,j));
}
}
}
System.out.println(list.size());
}
解法一 Set集合解法
Set集合与List集合的区别就是,Set集合的元素不能重复,List集合的元素是可以重复的,所以我们可以简化了判断是否list存在元素的过程;
public static void main(String[] args) {
String a="0100110001010001";
Set<String> set = new HashSet<String>();
int count=0;
for (int i = 0; i < a.length(); i++) {
for (int j = i+1; j <= a.length(); j++) {
set.add(a.substring(i,j));
}
}
System.out.println(set.size());
}