问题描述:
一个字符串的非空子串是指字符串中长度至少为1 的连续的一段字符组成的串。
例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共7 个。
注意在计算时,只算本质不同的串的个数。
请问,字符串0100110001010001 有多少个不同的非空子串?
思路分析:
- 子串必须是连续的一段字符,不能是不连续的字符组合。
- 在计算时,只需要统计本质不同的子串,即不重复计算相同的子串。
- 可以使用HashSet来实现,因为HashSet不允许存储重复元素。
代码实现:
import java.util.HashSet;
public class Main {
public static int countUniqueSubstrings(String s) {
// 使用 HashSet 来存储唯一的子字符串
HashSet<String> substrings = new HashSet<>();
// 遍历字符串中的所有可能的子字符串
for (int i = 0; i < s.length(); i++) {
for (int j = i + 1; j <= s.length(); j++) {
// 获取当前子字符串
String substring = s.substring(i, j);
// 将子字符串添加到 HashSet 中
substrings.add(substring);
}
}
// 返回 HashSet 中元素的数量,即唯一非空子字符串的数量
return substrings.size();
}
public static void main(String[] args) {
String s = "0100110001010001";
int count = countUniqueSubstrings(s);
System.out.println("唯一非空子字符串的数量为: " + count);
}
}