2-2 基础数据结构系列——栈

26 阅读1分钟

概述

对于栈,我们可以采用 STL stack 来实现,

下面是具体用法

操作说明
stack<type>s定义栈,Type 为数据类型,如 int,char
s.push(item)把 item 放到栈顶
s.top()返回栈顶元素,但不会删除
s.pop()删除栈顶元素,但不会返回
s.size()返回栈中元素的个数
s.empty()检查栈是否为空

例题

一.符号匹配

1. 想法

1.0 版本

考虑[]()或者[()],一定有一个()相互匹配,所以只要遍历该 string 字符串,对于([{我就把他们添加到队列中去,如果是)]},我就把他们对应的符号从栈顶取出来消除掉

2.0 版本

加入symbol.size()!=0的判断,避免出现栈为空却要提取元素的情况

3.0 版本

加入对于( ] )的考虑,也就是如果只出现]})的话,直接返回 false

4.0 版本

或许可以把后面的

if(symbol.size()==0)
    return true;
else
    return false;

直接替换成 return symbol.empty();

2. 代码

class Solution {
public:
    bool isValid(string s) {
        stack<char>symbol;
        int len=s.length();
        for(int i=0;i<len;i++)
        {
            if(s[i]=='('||s[i]=='{'||s[i]=='[')
            {
                symbol.push(s[i]);
            }
            else{
                if(symbol.size()!=0 &&((s[i]==')'&&symbol.top()=='(')||(s[i]==']'&&symbol.top()=='[')||(s[i]=='}'&&symbol.top()=='{')))
                    symbol.pop();
                else
                    return false;
            }


        }
        if(symbol.size()==0)
            return true;
        else
            return false;

    }
};