牛客算法基础noob61 字符串操作
题目描述
给定一个长度为n的小写字母字符串s,以及m次操作。每次操作给定两个整数l和r(1 ≤ l ≤ r ≤ n)以及两个小写字母c1和c2。需要将字符串s在区间[l, r]内所有等于c1的字符替换为c2。
按顺序执行完所有操作后,输出最终的字符串。
输入格式
第一行输入两个整数n和m(1 ≤ n, m ≤ 100)。
第二行输入一个长度为n的小写字母字符串s。
接下来m行,每行输入两个整数l和r,以及两个小写字母c1和c2,用空格分隔。输出格式
输出一个仅包含小写字母的字符串,表示最终结果。
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);// 1. 读取字符串长度n和操作次数mint n = scanner.nextInt();int m = scanner.nextInt();scanner.nextLine(); // 吸收nextInt()后的换行符,避免影响后续字符串读取// 2. 读取原始字符串s,并转为字符数组(字符串不可修改,数组可直接修改)String s = scanner.nextLine();char[] arr = s.toCharArray();// 3. 循环处理m次操作for (int i = 0; i < m; i++) {
// 读取当前操作的参数:l(左区间)、r(右区间)、c1(要替换的字符)、c2(目标字符)// 注意:输入格式是“整数 整数 字符 字符”,用空格分隔,需按顺序解析int l = scanner.nextInt();int r = scanner.nextInt();// next()读取单个字符(如"a"),再取第0位char c1 = scanner.next().charAt(0); char c2 = scanner.next().charAt(0);// 关键:将输入的1-based区间(题目中l、r从1开始)转为数组的0-based索引(Java数组从0开始)int startIndex = l - 1;int endIndex = r - 1;// 遍历区间[startIndex, endIndex],将c1替换为c2for (int j = startIndex; j <= endIndex; j++) {if (arr[j] == c1) {arr[j] = c2;}}}// 4. 将修改后的字符数组转回字符串,输出结果String result = new String(arr);System.out.println(result);scanner.close();}
}