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;
    }

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



  • 相关阅读:
    多模块应用自动化部署
    shell杀死指定端口的进程
    SpringBoot打包成war
    Spring Boot:The field file exceeds its maximum permitted size of 1048576 bytes
    nginx上配置phpmyadmin
    Ubuntu16.04中php如何切换版本
    E:dpkg was interrupted, you must manually run'dpkg配置'to correct the problem.
    Edusoho之LAMP环境搭建
    cocos2d-x -3.81+win7+vs2013开发环境创建新的项目
    M2Mqtt is a MQTT client available for all .Net platform
  • 原文地址:https://www.cnblogs.com/sdlwlxf/p/4328715.html
Copyright © 2011-2022 走看看