链接:https://leetcode-cn.com/problems/valid-parentheses/submissions/
括号有效性检验问题可以说是堆栈(stack)结构的典型应用了。
C++:
class Solution {
public:
bool isValid(string s) {
stack<char>Bracket;
for(int i = 0;i<s.size();i++)
{
if(s[i]=='('||s[i]=='['||s[i]=='{')
Bracket.push(s[i]);
else if(s[i]==')')
{
if(!Bracket.empty()&&Bracket.top()=='(')
Bracket.pop();
else
return false;
}
else if(s[i]==']')
{
if(!Bracket.empty()&&Bracket.top()=='[')
Bracket.pop();
else
return false;
}
else if(s[i]=='}')
{
if(!Bracket.empty()&&Bracket.top()=='{')
Bracket.pop();
else
return false;
}
}
return Bracket.empty();
}
};
java:
class Solution {
public boolean isValid(String s) {
ArrayList<Character> array = new ArrayList<Character> ();
for(int i = 0;i<s.length();i++)
{
if((s.charAt(i)=='(')||(s.charAt(i)=='[')||(s.charAt(i)=='{'))
array.add(s.charAt(i));
else if (s.charAt(i)==')')
{
if(array.size()==0)
return false;
if(array.get(array.size()-1)=='(')
array.remove(array.size()-1);
else
return false;
}
else if (s.charAt(i)==']')
{
if(array.size()==0)
return false;
if(array.get(array.size()-1)=='[')
array.remove(array.size()-1);
else
return false;
}
else if (s.charAt(i)=='}')
{
if(array.size()==0)
return false;
if(array.get(array.size()-1)=='{')
array.remove(array.size()-1);
else
return false;
}
}
if(array.size()==0)
return true;
else
return false;
}
python3:
class Solution:
def isValid(self, s: str) -> bool:
stack = []
dic = {
')': '(',
']': '[',
'}': '{'
}
for char in s:
if char in {'(', '[', '{'}:
stack.append(char)
elif char in {')', ']', '}'} and len(stack) > 0:
if stack.pop() != dic[char]:
return False
else :
return False
return len(stack)==0