Valid Parentheses
Given a string containing just the characters'('
,')'
,'{'
,'}'
,'['
and']'
, determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input:
"()"
Output:
true
Example 2:
Input:
"()[]{}"
Output:
true
Example 3:
Input:
"(]"
Output:
false
Example 4:
Input:
"([)]"
Output:
false
Example 5:
Input:
"{[]}"
Output:
true
Analysis
这种先入后出的特性很适合用栈Stack,因此利用一个stack来记录之每个字符,遍历每个字符,如果下一个字符是可以closed栈顶字符的同类括号,则出栈;最终结果就是检测这个栈是否为空
Solution
class Solution {
public boolean isValid(String s) {
if (s == null) {
return false;
}
Stack < Character > stack = new Stack < Character > ();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (!stack.isEmpty() && match(stack.peek(), ch)) {
stack.pop();
} else {
stack.push(ch);
}
}
return stack.isEmpty();
}
boolean match(char ch1, char ch2) {
return (ch1 == '(' && ch2 == ')') ||
(ch1 == '[' && ch2 == ']') ||
(ch1 == '{' && ch2 == '}');
}
}
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(char c : s.toCharArray()){
switch(c){
case ']': if(stack.isEmpty() || stack.pop()!='[') return false; break;
case ')': if(stack.isEmpty() || stack.pop()!='(') return false; break;
case '}': if(stack.isEmpty() || stack.pop()!='{') return false; break;
default: stack.push(c);
}
}
return stack.isEmpty();
}
}
Last updated
Was this helpful?