zoukankan      html  css  js  c++  java
  • 洛谷P1241 括号序列 题解 栈

    题目链接:https://www.luogu.com.cn/problem/P1241

    栈解法

    我们可以开一个栈,然后从左到右遍历字符串中每一个元素,如果是 ‘(’ 、 ‘[’ 就讲对应的坐标入栈,如果是 ‘)’ 且此时栈顶元素为 ‘(’ 或者是 ‘]’ 且此时栈顶元素为 ‘[’ ,则标记当前元素及栈顶元素为匹配的,同时栈顶元素出栈。

    最后,遍历一下每个元素,

    • 如果该元素对应的坐标是被标记为匹配的,则输出该元素;
    • 否则,如果该元素是 ‘(’ 或 ‘)’,输出 “()” ;如果该元素是 ‘[’ 或 ‘]’ , 输出 “[]” 。

    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1010;
    stack<int> stk;
    int n;
    bool match[maxn];
    char s[maxn];
    int main() {
        scanf("%s", s+1);
        n = strlen(s+1);
        for (int i = 1; i <= n; i ++) {
            if (s[i] == '(' || s[i] == '[') stk.push(i);
            else if (!stk.empty()) {
                int j = stk.top();
                if (s[j] == '(' && s[i] == ')' || s[j] == '[' && s[i] == ']') {
                    stk.pop();
                    match[j] = match[i] = true;
                }
            }
        }
        for (int i = 1; i <= n; i ++) {
            if (!match[i]) {
                if (s[i] == '(' || s[i] == ')') cout << "()";
                else cout << "[]";
            }
            else cout << s[i];
        }
        cout << endl;
        return 0;
    }
    
  • 相关阅读:
    PHP
    linux文件分割(将大的日志文件分割成小的)
    centos安装ssdb
    SSDB 数据库如何换用 rocksdb 引擎?
    A PHP extension for Facebook's RocksDB
    看电影有感
    视频格式(转的豆瓣)
    7月7号项目讲解总结
    java注解Annotation
    xml的解析
  • 原文地址:https://www.cnblogs.com/quanjun/p/13191161.html
Copyright © 2011-2022 走看看