题目描述
【问题描述】 一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。 注意在计算时,只算本质不同的串的个数。 请问,字符串0100110001010001 有多少个不同的非空子串?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
思路
思路:处理不同的个数可以想到使用set这个数据结构去重,而对于子串问题,直接调用substring()即可
但枚举时注意subString()方法的参数传递
代码贴上
package com.qustion;
import java.util.HashSet;
public class 不同子串 {
public static void main(String[] args) {
String s=new String("0100110001010001");//底层实际是数组
HashSet<String> set = new HashSet<>();
for (int i = 0; i <s.length(); i++) {
for (int j = i+1; j <=s.length() ; j++) {//substring(0,1)获取的字符串的第1位,(2,3)或取的是第3位的字符(左开右闭)(3,5)取的是4,5位
set.add(s.substring(i,j));
}
}
System.out.println(set.size());
}
}
结果为:100
注意事项
substring()方法中传入起始位置和终止位置的下标,返回的是这段区间里的字符串
但,,如何处理其边界情况呢,通过调试发现
substring(2,5)
通过上面截取的是3个数,从第3位开始,故,在内层循环中,j的边界需要等于字符串的长度