题目中给出的字符串仅包含字符'(',')','{','}','['和']',
对字符串中的每一个字符进行遍历,如果是右括号的话,需要看一下栈顶元素是不是和它匹配的左括号。如果是的话,那这两个括号是一对,让栈顶元素出栈
不满足配对条件的话,就让该元素进栈
如果字符串是一个合法的括号序列,那么整个字符串遍历完毕以后,栈是空的,即所有的右括号都右匹配的左括号。
如果栈内还右元素,就不是合法的括号序列
c++代码
class Solution {
public:
bool isValid(string s) {
stack<char> c;
for(int i = 0 ; i < s.length(); i++)
{
if(c.empty())
{
c.push(s[i]);
continue;
}
if(s[i]==')'&&c.top()=='('){c.pop();}
else if(s[i]=='}'&&c.top()=='{'){c.pop();}
else if(s[i]==']'&&c.top()=='['){c.pop();}
else{ c.push(s[i]);}
}
return c.empty();
}
};java代码
import java.util.*;
import java.util.Stack;
public class Solution {
public boolean isValid (String s) {
Stack<Character> c = new Stack<Character>();
for(int i = 0 ; i < s.length(); i++){
if(c.empty()){
c.push(s.charAt(i));
continue;
}
if(s.charAt(i)==')'&&c.peek()=='('){c.pop();}
else if(s.charAt(i)=='}'&&c.peek()=='{'){c.pop();}
else if(s.charAt(i)==']'&&c.peek()=='['){c.pop();}
else{ c.push(s.charAt(i));}
}
return c.empty();
}
}python代码
class Solution:
def isValid(self , s ):
stack = []
for i in s:
if len(stack)==0:
stack.append(i)
continue
if i==')' and stack[-1]=='(':
stack.pop()
elif i=='}' and stack[-1]=='{':
stack.pop()
elif i==']' and stack[-1]=='[':
stack.pop()
else:
stack.append(i)
if len(stack)==0:
return True
else:
return False
京公网安备 11010502036488号