问题描述:
一个字符串的非空子串是指字符串中长度至少为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);}
}