给定一个字符串所表示的括号序列,包含以下字符: ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, 判定是否是有效的括号序列。
样例
括号必须依照 “()” 顺序表示, “()[]{}” 是有效的括号,但 “([)]”则是无效的括号。
解题思路:用栈来存储括号,遍历字符数组判断是”([{” 就入栈,否则是”)]}”之一久出站并且判断出站元素是不是对应的那种字符。
一刷ac
二刷ac
public class Solution {
/**
* @param s A string
* @return whether the string is a valid parentheses
*/
public boolean isValidParentheses(String s) {
Stack<Character> stack = new Stack<Character>();
for(Character c : s.toCharArray()){
if(c == '(' || c == '[' || c == '{'){
stack.push(c);
}else if(c == ')' && !stack.isEmpty() && stack.peek() == '('){
stack.pop();
}else if(c == ']' && !stack.isEmpty() && stack.peek() == '['){
stack.pop();
}else if(c == '}' && !stack.isEmpty() && stack.peek() == '{'){
stack.pop();
}else
return false;
}
return stack.isEmpty();
}
}
public class Solution {
/**
* @param s A string
* @return whether the string is a valid parentheses
*/
public boolean isValidParentheses(String s) {
if(s == null || s.length() == 0) return false;
Stack<Character> stack = new Stack<Character>();
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if(ch == '(' || ch == '[' || ch == '{') stack.push(ch);
if(ch == ')'){
if(stack.isEmpty() || stack.pop() != '(') return false;
}
if(ch == ']'){
if(stack.isEmpty() || stack.pop() != '[') return false;
}
if(ch == '}'){
if(stack.isEmpty() || stack.pop() != '{') return false;
}
}
return stack.isEmpty();
}
}