1、问题描述
对于一个字符串 S,我们定义S的分值大(S)为S中恰好出现一次的字符
个数。例如f("aba")=1, f("abcm)=3,f("aaa")=0。
现在给定一个字符串S10.n一1(长度为1,请你计算对于所有S 的非空
子串sij0sisj<n,f(Slinj)的和是多少:
【输入格式】
输入一行包含一个由小写字母组成的宇符串 S。
【输出格式】
输出一个整数表示答案。
【样例输入】
ababc
【样例输出】
21
【样例说明】
a=1
ab=2
aba=1
abab=0
ababc=1
b=1
ba=2
bab=1
babc=2
a=1
ab=2
abc=3
b=1
bc=2
c=1
2、代码实现
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
int ans = 0;
for(int i = 0;i < s.length();i++) {
for(int j = i + 1;j <= s.length();j++) {
ans += fun(s.substring(i,j));
}
}
System.out.println(ans);
}
public static int fun(String s) {
Set<Character> set = new HashSet<>();
for(int i = 0;i < s.length();i++) {
if(!set.contains(s.charAt(i))) {
set.add(s.charAt(i));
}else {
set.remove(s.charAt(i));
}
}
System.out.println(s + "=" + set.size());
return set.size();
}
}