现在给定一个字符串S,请你写一个Java程序计算对于所有S的非空非满子串中不同字母个数的和是多少。 一个字符串的非空非满子串是指字符串中长度至少为1的连续的一段字符组成的串(不含字符串本身)。例如,字符串 aaab 有非空非满子串 a, b, aa, ab, aaa, aab一共 6个,每个子串中不同字母个数分别为1,1,1,2,1,2,它们的和为8。 输入一个字符串 输出所有非空非满子串中不同字母个数的和 输入aaab 输出8
时间: 2024-02-18 07:04:12 浏览: 130
好的,下面是 Java 代码的实现,和之前的 Python 代码思路一致:
```java
public static int countDifferentLetters(String s) {
int res = 0;
int k = 0;
int left = 0;
int right = 0;
Set<Character> letters = new HashSet<>();
while (right < s.length()) {
// 将当前字符加入集合
letters.add(s.charAt(right));
// 如果集合大小小于等于 k,则将不同字母个数加入结果中
if (letters.size() <= k) {
res += letters.size();
}
// 如果集合大小大于 k,则移动左边界直到集合大小小于等于 k
else {
while (letters.size() > k) {
letters.remove(s.charAt(left));
left += 1;
}
res += letters.size();
}
right += 1;
}
return res;
}
```
其中,s 表示输入的字符串,k 表示不同字母的个数,res 表示结果。需要注意的是,Java 中的集合使用了泛型,需要指定集合中元素的类型。
阅读全文