题目:
Given a string containing just the characters , determine if the input string is valid.The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
翻译:
给定一个字符串,只包含’(‘, ‘)’, ‘{‘, ‘}’, ‘[’ 和’]’这些字符,检查它是否是“有效”的。
括号必须以正确的顺序关闭,例如”()” 和”()[]{}”都是有效的,”(]” 和”([)]”是无效的。分析:
本题考查的是栈结构,具有后进先出的特性。有效包含2个方面,第一个是如果是关闭的括号,前一位一定要刚好有一个开启的括号;第二个是最终结果,需要把所有开启的括号都抵消完。一个比较容易出错的地方是,遇到关闭括号时,要先判断栈是否已经空了。
bool isValid(string s) { int len=s.length(); stack<char> A; for(int i=0;i<len;i++) { if(s[i]=='('||s[i]=='{'||s[i]=='[') A.push(s[i]); else{ if(A.empty()) return false; else{ char ch=A.top(); if(ch=='(') { if(s[i]==')') A.pop(); else return false; } else if(ch=='{'){ if(s[i]='}') A.pop(); else return false; } else if(ch=='[') { if(s[i]==']') A.pop(); else return false; } } } } if(A.empty()) return true; else return false; } };