题目
一个字符串的非空子串是指字符串中长度至少为1的连续的一段字符组成的串。例如,字符串aaab有非空子串a,b,aa,ab,aaa,aab,aaab,一共7个。 注意在计算时,只算本质不同的串的个数。
请问,字符串0100110001010001有多少个不同的非空子串?
解析
1.什么是子串???长度至少为1+下标连续!(与子序列区分开来!!我就写成了子序列)
2.怎么找比较方便?有没有什么函数?——substring(beginIndex,endIndex),但是取不到endIndex!!!
public static void main(String[] args) {
String string = "0100110001010001";
HashSet<String> set = new HashSet<>();
for (int i = 0; i < string.length(); i++) {
for (int j = i + 1; j <= string.length(); j++) {
set.add(string.substring(i, j));
}
}
System.out.println(set.size());
}
这道题最需要注意的就是——你需要想到用substring——>然后注意到这个取值范围
因为substring的endIndex是取不到最后一位的,那么我们这道题需要取到最后一位,那么就需要让
j<=string.length()
这一步非常关键。
答案:
做题总结
读懂题!读懂题!真的要认真仔细读题!
以后编写代码之前问自己几个问题:
1.我是否真的理解题意?我有哪些地方不理解?
2.我应该用什么样的方法或者数据结构来写代码?现阶段我能用什么方法?
3.如何想出好的测试用例?以确定自己的程序没有问题?
4.我能不能优化?
end.