题解 | 小苯的IDE括号问题(标记数组+双指针 )

小苯的IDE括号问题(easy)

https://www.nowcoder.com/practice/0a526c7863474220aaef082ab5f2a00a

很多人用双端队列,其实用数组标记删除位置再输出未删除的字符更简单,没学过队列也能做。

核心思想就是用数组标记当前字符位置是否已删除,用左指针和右指针标记光标两侧未删除的首个字符。根据不同操作,边标记边移动指针即可。

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n, k;
    string s, op;
    cin >> n >> k;
    cin >> s;
    //用数组标记当前位置是否被删除
    vector<bool>isDelete(n, false);
    int pos = s.find('I');//光标位置
    int l = pos - 1, r = pos + 1;//定义左指针和右指针
    while (k--) {
        cin >> op;
        //按照题目规则操作即可,每删除一次指针移动一步
        if (op == "backspace") {
            if (l >= 0 && r < n && s[l] == '(' && s[r] == ')') {
                isDelete[l--] = true;
                isDelete[r++] = true;
            } else if (l >= 0)
                isDelete[l--] = true;
        } else if (r < n)
            isDelete[r++] = true;
    }
    //由于n比较大,所以这里不判断标记,直接扫描未删除的区间
    for (int i = 0; i <= l; i++)cout << s[i];
    cout << 'I';//不要忘记中间的I
    for (int i = r; i < n; i++)cout << s[i];
}

全部评论

相关推荐

10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
notbeentak...:就抓,嗯抓,开不开匿名都要抓,一点坏事不让说,就对公司顶礼膜拜佩服的五体投地就对了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务