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;