zoukankan      html  css  js  c++  java
  • 括号匹配(二)

    括号匹配(二)

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:6
     
    描述
    给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
    如:
    []是匹配的
    ([])[]是匹配的
    ((]是不匹配的
    ([)]是不匹配的
     
    输入
    第一行输入一个正整数N,表示测试数据组数(N<=10)
    每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100
    输出
    对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行
    样例输入
    4
    []
    ([])[]
    ((]
    ([)]
    样例输出
    0
    0
    3
    2

    先给出我的错误答案
    基本思路就是利用栈的思想,从左到右遍历右括号,检查右括号的前一个括号是否匹配,匹配的话就成对删去,不匹配就添加括号。遍历一遍后,添加的个数再加上最后剩下未匹配的左括号数。

    #include<iostream>
    using namespace std;
    
    int check(const char* str)
    {
        int ret = 0;
        std::string ope(str);
        auto iter = ope.begin();
        for(;iter != ope.end();)
        {
            char i = *iter;
            if(i == ')')
            {
                if(iter == ope.begin())
                {
                    ret++;
                    iter = ope.erase(iter);
                }
                else if(*(iter - 1) != '(')
                {
                    ret++;
                    iter = ope.erase(iter);
                }
                else
                {
                    iter = ope.erase(iter-1);
                    iter = ope.erase(iter);
                }
            }
            else if(i == ']')
            {
                if(iter == ope.begin())
                {
                    ret++;
                    iter = ope.erase(iter);
                }
                else if(*(iter - 1) != '[')
                {
                    ret++;
                    iter = ope.erase(iter);
                }
                else
                {
                    iter = ope.erase(iter-1);
                    iter = ope.erase(iter);
                }
            }
            else
                iter++;
        }
        ret += ope.length();
        return ret;
    }
    
    int main()
    {
        int len = check("([)]");
        cout << len << endl;
        system("pause");
        return 0;
    }

    有明显的错误,比如 [(]]]]就错误了。。。待明天研究



  • 相关阅读:
    How to Use the UTL_MAIL Package
    ORA-32001: 已请求写入 SPFILE, 但是在启动时未指定 SPFILE
    2.4 批量下达车间任务平台
    2.3 改装及返修任务管理
    2.2 生产外协管理
    2.1 车间排产与生产备料
    1.15 计划分析-订单与预测差异比较
    1.14 计划分析-两周订单变更比较
    1.13 生产计划的调整与维护
    1.12 售后配件需求与计划生产衔接
  • 原文地址:https://www.cnblogs.com/sdlwlxf/p/4328715.html
Copyright © 2011-2022 走看看