题解 | 舞萌时间到!-Java
舞萌时间到!
https://www.nowcoder.com/practice/cef5fe464ca54a10ba1b4374f423f09c
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取判定序列字符串
String s = scanner.next();
int n = s.length();
// 将每个字符转换为对应的dx分
int[] scores = new int[n];
for (int i = 0; i < n; i++) {
char c = s.charAt(i);
switch (c) {
case 'P':
scores[i] = 3;
break;
case 'p':
scores[i] = 2;
break;
case 'G':
scores[i] = 1;
break;
case 'g':
case 'm':
scores[i] = 0;
break;
}
}
// 构建前缀和数组,prefix[i]表示前i个字符的dx分总和
long[] prefix = new long[n + 1];
for (int i = 1; i <= n; i++) {
prefix[i] = prefix[i - 1] + scores[i - 1];
}
// 处理查询
int q = scanner.nextInt();
for (int i = 0; i < q; i++) {
int l = scanner.nextInt();
int r = scanner.nextInt();
// 区间[l, r]的和 = 前r个字符的和 - 前l-1个字符的和
long sum = prefix[r] - prefix[l - 1];
System.out.println(sum);
}
scanner.close();
}
}
查看12道真题和解析