题目描述
对于一个字符串 SS,我们定义 SS 的分值 f(S)f(S)为 SS 中恰好出现一次的字符个数。例如 f(aba)=1,f(abc)=3,f(aaa)=0f(aba)=1,f(abc)=3,f(aaa)=0。
现在给定一个字符串 S0⋯n−1S0⋯n−1(长度为 nn,1≤n≤1051≤n≤105),请你计算对于所有 SS 的非空子串 Si⋯j(0≤i≤j<n)Si⋯j(0≤i≤j<n),f(Si⋯j)f(Si⋯j) 的和是多少。
输入描述
输入一行包含一个由小写字母组成的字符串 SS。
输出描述
输出一个整数表示答案。
输入输出样例
示例
输入
ababc
输出
21
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
String str = scan.next();
int n = str.length();
int sum = 0;
for(int i = 0; i < n; i++){
for(int j = i+1; j <= n; j++){
String temp = str.substring(i, j);
sum += help(temp);
}
}
System.out.println(sum);
scan.close();
}
public static int help(String temp){
int[] visit = new int[128];
for(char c:temp.toCharArray()){
visit[c]++;
}
int num = 0;
for(int i:visit){
if(i == 1){
num++;
}
}
// HashMap<Character,Integer> map = new HashMap<>();
// for(char c:temp.toCharArray()){
// map.put(c, map.getOrDefault(c, 0)+1);
// }
// Collection<Integer> coll = map.values();
// int num = 0;
// for(Integer i:coll){
// if(i == 1){
// num++;
// }
// }
return num;
}
}
最后超时啦,只能通过部分案例..