• 括号匹配


    Description

      给定一串由左小括号"("和右小括号")"组成的串,判断其是否匹配。如(a+b+(c+d))的括号是匹配的,((a+c+)+f)+g*(g+))的括号是匹配的。

    分析

      每个")"总是和它最近的"("匹配。

    AC代码

    思路1

      假设读到一个"(",我们就把key自增,读到")",就自减,如果括号是匹配的话,最后key的值应该是0(当然这是在这中间,key不小于0的情况下)。如果key小于0就说明,没有"(",就已经有")"。

    #include <iostream>
    #include <cstring>
    using namespace std;
    int main()
    {
    	char s[101];
        int key = 0;
        cin >> s;
        for(char *begin = s,*end = s + strlen(s);begin != end;++begin)
        {
            if(*begin == '(')
                ++key;
            else if(*begin = ')')
                --key;
            if(key < 0)
                break;
        }
        if(key)
            cout << "NO" << endl;
        else
            cout << "YES" << endl;
    	return 0;
    }
    

    思路2

      上面的key就好比栈的元素个数,所以我们可以利用栈来解决这个问题,下面利用数组作为栈。

    #include <iostream>
    #include <cstring>
    using namespace std;
    int main()
    {
        char s[101];
        int top = 0;
        cin >> s;
        int len = strlen(s);
        char *stack = new char[len];
        for(char *end = s + len,begin = s;begin!=end;++begin)
        {
            if(*begin == '(')
                stack[top++] = '(';
            else if(*begin = ')')
                --top;
            if(top < 0)
                break;
        }
        delete[] stack;
        if(top)
            cout << "NO";
        else
            cout << "YES";
        return 0;
    }
    

      使用栈的好处,就是知道左括号与右括号匹配,当弹栈时,弹出的'('和刚读到的')'就是一对。

  • 相关阅读:
    unity3D打造skybox淡入淡出
    FastGUI for NGUI教程
    (转)oracle的split函数
    (转)oracle嵌套表示例
    (转)pipe row的用法, Oracle split 函数写法.
    (转)Oracle 包(Package)
    (转)Oracle存储过程中的事务
    distinct与order by
    Oracle存储过程使用总结
    (转)Oracle中动态SQL详解
  • 原文地址:https://www.cnblogs.com/h-hg/p/8536840.html
Copyright © 2020-2023  润新知