概述
对于栈,我们可以采用 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;
}
};