题目描述
给定一个仅含小写英文字母的字符串 s,每次操作选择一个区间 [li ,ri ] 将 s 的该区间中的所有字母 xi 全部替换成字母 yi,问所有操作做完后,得到的字符串是什么。
输入格式
输入的第一行包含一个字符串 s 。
第二行包含一个整数 m 。
接下来 m 行,每行包含 4 个参数 li ,ri , xi , yi,相邻两个参数之间用一个空格分隔,其中 li ,ri 为整数,xi , yi 为小写字母。
输出格式
输出一行包含一个字符串表示答案。
样例输入
abcaaea 4 1 7 c e 3 3 e b 3 6 b e 1 4 a c
样例输出
cbecaea
提示
对于 40% 的评测用例,|s|, m ≤ 5000;
对于所有评测用例,1 ≤ |s|,m ≤ 105 ,1 ≤ li ≤ ri ≤ |s| ,,其中 |s| 表示字符串 s 的长度。
思路:首先我们需要先输入操作次数之后定义需要的数组之后,洗一个用来进行字符串变换的放法,之后需要将指定区=区域内的字符串进行遍历,找到需要变换的字符串之后进行替换,之后拼接字符串就行。
AC代码:
import java.util.Scanner;
public class StrInstead {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
char[] ch = str.toCharArray();
int n = sc.nextInt();
int[] I = new int[n];
int[] R = new int[n];
char[] C1 = new char[n];
char[] C2 = new char[n];
//首次存入需要操作的数
for(int i = 0; i < n; i++){
I[i] = sc.nextInt();
R[i] = sc.nextInt();
C1[i] = sc.next().charAt(0);
C2[i] = sc.next().charAt(0);
}
//输出操作完成之后的结果
System.out.println(ModifyString(ch,I,R,C1,C2));
}
public static String ModifyString(char[] ch,int[] I,int[] R,char[] C1,char[] C2){
String res;
for(int i = 0; i < I.length; i++){
for(int j = I[i]; j <= R[i]; j++){
if(ch[j-1] == C1[i]){
ch[j-1] = C2[i];
}
}
}
res = new String(ch);
return res;
}
}