题目:
描述
给定长度为n的只有小写字母的字符串s,进行m次操作,每次将[l,r]范围内所有c1字符改成c2,输出操作完的字符串
输入描述:
第一行两个数n,m
第二行一个字符串s
之后m行,每行两个数l 、r两个字符c1、 c2
输出描述:
输出一行一个字符串
示例1
解题代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
StringBuilder stb=new StringBuilder();
int n=in.nextInt();
int m=in.nextInt();
int l=0;
int r=0;
char[] arr=new char[2];
String s=in.next();
stb.append(s);
for(int j=0;j<m;j++){
for(int i=0;i<4;i++){
if(i<1){
l=in.nextInt();
}else if(i<2){
r=in.nextInt();
}else{
String d=in.next();
arr[i-2]=d.charAt((0));
}
}
for(int i=l-1;i<=r-1;i++){
if(s.charAt(i)==arr[0]){
stb.setCharAt(i,arr[1]);
}
}
s=stb.toString();
}
System.out.println(s);
}
}
解析:
这道题涉及到修改字符串中某一个字母,我们不能直接对字符串某个字母进行修改(字符串不可变性),所以要借助StringBuilder类
先创建StringBuilder,使得存储与字符串S相同的字符串
String s=in.next();
stb.append(s);
然后利用StringBuilder 方法setCharAt(int index,char ch),去修改对应位置字符
修改完毕后利用stb.toString()返回字符串让S接收;
最后打S