首页 > 试题广场 >

小苯的IDE括号问题(easy)

[编程题]小苯的IDE括号问题(easy)
  • 热度指数:287 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}在一款智能代码编辑器中,光标用字符 I 表示。初始时给出一个只包含字符 \text{(}\text{)}\text{I} 的括号串,其中 恰好出现一次 I 作为光标位置。编辑器支持下列两种删除操作:
{\hspace{23pt}}_\texttt{1.}\, backspace
{\hspace{38pt}}\circ\,若光标左侧字符为 `(`,且光标右侧紧跟字符为 `)`,编辑器会一次性删除这对括号;
{\hspace{38pt}}\circ\,否则,若光标左侧仍有字符,则仅删除光标左侧一个字符;若左侧为空则无效果。
{\hspace{23pt}}_\texttt{2.}\, delete
{\hspace{38pt}}\circ\,若光标右侧存在字符,则删除光标右侧第一个字符;否则无效果。

\hspace{15pt}给定初始括号串以及 k 次操作序列(每次为 backspacedelete),请输出全部操作执行完毕后的最终字符串。

输入描述:
\hspace{15pt}第一行输入两个整数 n,k\left(1\leqq k\leqq n\leqq 2\times10^{5}\right)——初始字符串长度及操作次数。 
\hspace{15pt}第二行输入长度为 n 的字符串 s,仅包含 `(`, `)` 与 `I`,其中 I 恰好出现一次。
\hspace{15pt}接下来 k 行,每行输入一个操作类型:backspacedelete


输出描述:
\hspace{15pt}输出一行字符串,表示所有操作结束后的括号串。
示例1

输入

10 3
((()(I))((
backspace
backspace
delete

输出

(((I((
示例2

输入

5 3
((I))
backspace
backspace
delete

输出

I

说明

显然括号都被删除完了。

备注:

n, k = map(int, input().split())
s = input()

# 找到光标位置
cursor_pos = s.find("I")

# 将字符串分为左右两部分,不包括光标
left_part = s[:cursor_pos]
right_part = s[cursor_pos + 1 :]

for _ in range(k):
    operation = input().strip()

    if operation == "delete":
        # delete操作:删除光标右侧一个字符(如果存在)
        if right_part:  # 如果右侧有字符
            right_part = right_part[1:]

    elif operation == "backspace":
        # backspace操作
        if left_part and right_part and left_part[-1] == "(" and right_part[0] == ")":
            # 如果光标左右是一对匹配的括号,则同时删除
            left_part = left_part[:-1]
            right_part = right_part[1:]
        elif left_part:  # 如果左侧有字符
            left_part = left_part[:-1]

# 输出最终结果
result = left_part + "I" + right_part
print(result)

发表于 今天 10:02:13 回复(0)