第十一届蓝桥杯省赛 Java 大学 B 组—子串分值和—满分百分题解
一、解题思路
1、解法一( Java )
解法思路:模拟 + 数学规律
☝当前元素提供的个数 = 当前位置与末位置的差+1
乘以 当前位置与该元素上一次出现位置的差
当前位置与末位置的差+1
: 该元素在当前位置以及之后的位置无论之后还有没有该元素,该元素都是只提供一次.
当前位置与该元素上一次出现位置的差
:该元素在当前位置 以及在 该元素上一次出现的地方消失后的位置之间都要提供次数.
伪代码如下:
/**
* @author Listen 1024
* @description 第十一届蓝桥杯省赛 Java 大学 B 组—子串分值和—满分百分题解
* @date 2022-4-3 19:27:52
*/
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
char[] arr1 = scan.nextLine().toCharArray();
int[] arr2 = new int[26];
long count = 0;
int index;
long len = arr1.length;
Arrays.fill(arr2, -1);
for (int i = 0; i < arr1.length; i++) {
index = arr1[i] - 'a';
count += (len - i) * (i - arr2[index]);
arr2[index] = i;
}
System.out.println(count);
}
}
运行结果截图如下: