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

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

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

知识点双指针

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

描述

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

1. 1.​ backspace :

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

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

2. 2.​ delete :

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

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

输入描述:

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

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

接下来 kk 行,每行输入一个操作类型:backspace 或 delete。

输出描述:

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

示例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;
}
相关推荐
weixin_307779132 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
Frank_refuel5 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
hetao17338377 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
Zootopia6267 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan8 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
2601_960356389 小时前
2027校招采购岗解析:数学基础如何迁移到需求预测、成本与供应商分析
人工智能·算法
h_a_o777oah9 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO99 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician9 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.9 小时前
VLAN 资源池(100~200 分档)
数据结构·算法