首页 > 试题广场 >

转化

[编程题]转化
  • 热度指数:1181 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}小美有一个长度为 n,仅由大小写英文字母组成的字符串 s。小美将对字符串执行以下 m 次操作:
\hspace{23pt}\bullet\,当操作类型 op=1 且给定两个小写字母 letter1,letter2(满足 letter1\leqq letter2)时,将字符串中所有位于字母表中 \texttt{[letter1,letter2]} 的小写字母转换为对应的大写字母;
\hspace{23pt}\bullet\,当操作类型 op=2 且给定两个大写字母 letter1,letter2(满足 letter1\leqq letter2)时,将字符串中所有位于字母表中 \texttt{[letter1,letter2]} 的大写字母转换为对应的小写字母。

输入描述:
\hspace{15pt}在一行上输入两个整数 n,m\ \left(1\leqq n,m\leqq 2\times10^5\right),分别表示字符串长度和操作次数; 
\hspace{15pt}在一行上输入一个长度为 n,仅由大小写英文字母组成的字符串 s
\hspace{15pt}接下来 m 行,每行输入三个元素:整数 op 和两个字符 letter1,letter2,满足:
\hspace{23pt}\bullet\,op=1,则 letter1,letter2 为小写字母,且 letter1\leqq letter2
\hspace{23pt}\bullet\,op=2,则 letter1,letter2 为大写字母,且 letter1\leqq letter2


输出描述:
\hspace{15pt}输出执行完所有操作后得到的最终字符串。
示例1

输入

3 1
abc
1 a c

输出

ABC

说明

\hspace{15pt}在此样例中,初始字符串 \texttt{,将区间 \texttt{[a,c]} 的小写字母统一转换成大写,得到 \texttt{
示例2

输入

6 2
aAbBcC
1 a b
2 B C

输出

AAbbcc

说明

\hspace{15pt}在此样例中, 
\hspace{23pt}\bullet\,第一次操作将字符串中所有满足字母表区间\texttt{[a,b]}所有小写字母的变为大写字母,得到 \texttt{
\hspace{23pt}\bullet\,第二次操作将字符串中所有满足字母表区间\texttt{[B,C]}所有大写字母的变为小写字母,最终得到 \texttt{
发表于 2025-08-11 22:37:25 回复(0)
以下是我的解题思路:
1. 读取用户输入,存入变量:字符串长度, 指令数量, 原始字符串,操作指令
2. 创建函数transfer_string() 判断操作指令, 返回更改以后的字符串
3. 根据指令数量循环调用函数transfer_string(), 返回结果。

遇到的问题:第一次函数返回的结果,需要作为第二次函数的参数进行运算,这种情况请问怎么处理?

import sys

def transfer_string(s, line):

    list_s = list(s)
    print(list_s)

    if int(line[0]) == 1 and line[1] < line[2]:
            for i in range(len(list_s)):
                if ord(s[i]) in range(ord(line[1]), ord(line[2])+1):
                    list_s[i] = list_s[i].upper()
    elif int(line[0]) == 2 and line[1] < line[2]:
            for i in range(len(list_s)):
                if ord(s[i]) in range(ord(line[1]), ord(line[2])+1):
                    list_s[i] = list_s[i].lower()
    
    return "".join(list_s)


if __name__ == "__main__":
    n, m = map(int, input("输入n, m:").split())
    s = input("输入一个字符串:")
    s1 = s
    for _ in range(m):
        line = input("请输入转换格式: ").split()
        result = transfer_string(transfer_string(s1, line), line)
        print(result)


发表于 2025-08-17 17:58:36 回复(0)