首页 > 试题广场 >

小苯的IDE括号问题(easy)

[编程题]小苯的IDE括号问题(easy)
  • 热度指数:1535 时间限制: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

说明

显然括号都被删除完了。

备注:

头像 Silencer76
发表于 2025-08-12 16:55:18
题目链接 小苯的IDE括号问题(easy) 题目描述 在一个特殊的代码编辑器中,光标由字符 'I' 表示。给定一个初始字符串,它由 '('、')' 和一个 'I' 组成。编辑器支持两种操作: backspace: 如果光标左侧是 '(' 且右侧是 ')',则同时删除这对括号。 否则,如果光标左 展开全文
头像 丨阿伟丨
发表于 2025-09-01 10:15:03
题目链接 小苯的IDE括号问题(easy) 题目描述 给定一个包含 (, ) 和一个光标 I 的字符串,以及一个操作序列。需要模拟两种删除操作并输出最终的字符串。 backspace: 如果光标左边是 (,右边是 ),则同时删除这对括号。 否则,如果光标左边有字符,只删除左边的一个字符。 如果左 展开全文
头像 牛客754921490号
发表于 2025-12-17 23:04:42
#include <iostream> using namespace std; // 用string::erase 会导致后续字符串复制前移,n比较大时开销巨大 // 光标不能移动,只需要标记出哪些区域被删除,然后输出未被删除的部分以及光标I即可 int main() { in 展开全文
头像 凶狠跑刀崽
发表于 2025-08-17 01:45:29
import java.io.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) throws Exception { Fa 展开全文
头像 湮雨
发表于 2025-11-13 14:55:58
#include <iostream> #include<vector> using namespace std; string solve(vector<string>& op,string& s){ int left=0; i 展开全文
头像 聪明的六边形战士在考古
发表于 2025-11-11 22:53:07
很多人用双端队列,其实用数组标记删除位置再输出未删除的字符更简单,没学过队列也能做。核心思想就是用数组标记当前字符位置是否已删除,用左指针和右指针标记光标两侧未删除的首个字符。根据不同操作,边标记边移动指针即可。 #include <iostream> #include <vect 展开全文
头像 牛客297730300号
发表于 2025-08-19 10:44:55
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () = 展开全文
头像 冷艳的西红柿刷牛客
发表于 2025-11-12 14:32:56
#include <iostream> #include <cstring> #include <string> using namespace std; //对于c++的输入getline(cin, s)会读取直到'\n'为止,因此cin >> 展开全文