2022年第十三届蓝桥杯大赛软件类决赛C/C++大学C组真题

题目描述

给定一个仅含小写英文字母的字符串 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;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值