HJ179 小苯的IDE括号问题(easy)

  • 题目
  • 题解(15)
  • 讨论(9)
  • 排行

中等 通过率:30.18% 时间限制:1秒 空间限制:256M

知识点双指针

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

在一款智能代码编辑器中,光标用字符 II 表示。初始时给出一个只包含字符 ((、))、II 的括号串,其中 恰好出现一次 II 作为光标位置。编辑器支持下列两种删除操作:

1. 1.​ backspace

∘ ∘若光标左侧字符为 `(`,且光标右侧紧跟字符为 `)`,编辑器会一次性删除这对括号;

∘ ∘否则,若光标左侧仍有字符,则仅删除光标左侧一个字符;若左侧为空则无效果。

2. 2.​ delete

∘ ∘若光标右侧存在字符,则删除光标右侧第一个字符;否则无效果。

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

输入描述:

第一行输入两个整数 n,k(1≦k≦n≦2×105)n,k(1≦k≦n≦2×105)------初始字符串长度及操作次数。

第二行输入长度为 nn 的字符串 ss,仅包含 `(`, `)` 与 `I`,其中 II 恰好出现一次。

接下来 kk 行,每行输入一个操作类型:backspacedelete

输出描述:

输出一行字符串,表示所有操作结束后的括号串。

示例1

输入:

复制代码
10 3
((()(I))((
backspace
backspace
delete

复制输出:

复制代码
(((I((

复制

示例2

输入:

复制代码
5 3
((I))
backspace
backspace
delete

复制输出:

复制代码
I

复制说明:

复制代码
显然括号都被删除完了。
cpp 复制代码
#include <iostream>
#include <string>
#include <vector>
#include <deque>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n, m;
    cin >> n >> m;
    string s;
    cin >> s;

    deque<char> left_q, right_q;
    int cursor_pos = -1;
    for (int i = 0; i < n; ++i) {
        if (s[i] == 'I') {
            cursor_pos = i;
            break;
        }
        left_q.push_back(s[i]);
    }
    for (int i = cursor_pos + 1; i < n; ++i) {
        right_q.push_back(s[i]);
    }

    for (int i = 0; i < m; ++i) {
        string op;
        cin >> op;
        if (op == "backspace") {
            if (!left_q.empty() && !right_q.empty() && left_q.back() == '(' && right_q.front() == ')') {
                left_q.pop_back();
                right_q.pop_front();
            } else if (!left_q.empty()) {
                left_q.pop_back();
            }
        } else { // delete
            if (!right_q.empty()) {
                right_q.pop_front();
            }
        }
    }

    for (char c : left_q) {
        cout << c;
    }
    cout << 'I';
    for (char c : right_q) {
        cout << c;
    }
    cout << endl;

    return 0;
}
相关推荐
华农DrLai2 小时前
什么是推荐系统中的负反馈?用户的“踩“和“不感兴趣“怎么用?
人工智能·算法·llm·prompt·知识图谱
cookies_s_s2 小时前
从零实现 SPSC 无锁队列
c++·cap
木斯佳2 小时前
前端八股文面经大全:京东零售JDY前端一面(2026-04-14)·面经深度解析
前端·算法·设计模式·ai·断点续传
zore_c2 小时前
【C++】C++——类的默认成员函数(构造、析构、拷贝构造函数)
java·c语言·c++·笔记·算法·排序算法
m0_587098992 小时前
C++,cv::Mat数据类型、通道数等概念梳理
c++·opencv·计算机视觉
进击的荆棘2 小时前
C++起始之路——AVL树的实现
开发语言·数据结构·c++·stl·avl
生信研究猿2 小时前
第2题-模型推理量化加速优化问题
python·算法
Hical_W2 小时前
深入学习CPP26_静态反射
c++·学习
进击的荆棘2 小时前
C++起始之路——红黑树的实现
开发语言·数据结构·c++·stl·红黑树