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;
}
相关推荐
小O的算法实验室8 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
码匠许师傅8 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
Tbisnic9 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
Brilliantwxx9 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
空堂与归10 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
动词ing11 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习11 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
一只小小的芙厨12 小时前
基础数论总结
笔记·学习·算法
夜不会漫长13 小时前
C++入门(1)
开发语言·c++·算法
wen_zhufeng14 小时前
IndexTTS 2.5 技术报告
人工智能·算法·机器学习