原题链接在这里:https://leetcode.com/problems/valid-parentheses/
当遇到'(', '[', '{' 时压栈,当遇到')', ']', '}'时观察stk是否为空,若是空,返回false,若不是,pop()出来的第一个元素是否对应,若不对应, 返回false. 读完整个string若stk不空,返回false。若没问题,返回true。
AC Java:
public class Solution {
public boolean isValid(String s) {
if(s == null || s.length() == 0)
return true;
Stack<Character> stk = new Stack<Character>();
char c;
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == '(' ||s.charAt(i) == '[' || s.charAt(i) == '{'){
stk.push(s.charAt(i));
}
if((s.charAt(i) == ')' ||s.charAt(i) == ']' || s.charAt(i) == '}') && stk.empty()){
return false;
}
if(s.charAt(i) == ')' ){
c = stk.pop();
if(c!='('){
return false;
}
}
if(s.charAt(i) == ']' ){
c = stk.pop();
if(c!='['){
return false;
}
}
if(s.charAt(i) == '}' ){
c = stk.pop();
if(c!='{'){
return false;
}
}
}
if(!stk.empty()){
return false;
}
return true;
}
}