17164字符迁移
⭐️难度:中等
📖
📚
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int q = scanner.nextInt();scanner.nextLine(); // 清除行末的换行符String str = scanner.nextLine();char[] a = str.toCharArray();// 将字符串转换成数字 a -> 0,b -> 1int[] b = new int[n];for (int i = 0; i < n; i++) {b[i] = a[i] - 'a';}// 差分数组int[] diff = new int[n + 1];// 处理每次操作for (int i = 0; i < q; i++) {int l = scanner.nextInt();int r = scanner.nextInt();int k = scanner.nextInt();l--;r--; // 转换成 0 基索引k %= 26;diff[l] += k;diff[r + 1] -= k;}// 应用差分数组int sum = 0; // 求前缀和for (int i = 0; i < n; i++) {sum += diff[i];// 计算最终的移位数,确保结果在 [0, 25] 范围内int sum2 = (sum + b[i]) % 26;// 重新转换回字符串b[i] = sum2;}for (int i = 0; i < n; i++) {System.out.print((char)(b[i] + 'a'));}scanner.close();}
}
⭕️
- k有可能很大,要对26取余。
k %= 26;
- 计算最终的移位数,确保结果在 [0, 25] 范围内
int sum2 = (sum + b[i]) % 26;