题目描述
输入描述
输出描述
输出一个整数表示答案。
输入输出样例
示例 1
输入
ababc
输出
28
运行限制
最大运行时间:1s
最大运行内存: 128M
源码:
import java.util.Arrays;
import java.util.Scanner;
public class 子串分值和 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char[] s=scanner.nextLine().toCharArray();
int[] last=new int[26];//记录当遍历到字符串第i个位置时,某个字符最后一次出现的位置
Arrays.fill(last, -1);
int len=s.length;//记录总的得分
long res=0;
for (int i = 0; i < s.length; i++) {
res+=(long)(i-last[s[i]-'a'])*(len-i);
last[s[i]-'a']=i;//更新一下last数组
}
System.out.println(res);
}
}
基于一个贡献的思想,一个字符能贡献几个子串