题目:
描述
给定长度为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