给定一个仅包含字符的字符串'('
, ')'
, '{'
, '}'
, '['
and ']'
,判断输入字符串是否有效。
输入字符串在以下情况下有效:
- 左括号必须由相同类型的括号封闭。
- 左括号必须按正确的顺序关闭。
- 请注意,空字符串也被视为有效。
示例1:
Input: "()[]{}"
Output: true
Example 2:
示例2:
Input: "{[(])}"
Output: false
我针对上述问题的解决方案是:
static boolean isPair(char left,char right){
return left=='{' && right=='}' || left=='(' && right==')' || left=='[' && right==']';
}
public boolean isValid(String s) {
Stack<Character> stack= new Stack<>();
for(char ch: s.toCharArray()){
if(ch=='(' || ch=='{' || ch=='['){
stack.push(ch);
}
else{
if(!stack.isEmpty() && isPair(stack.peek(),ch))
stack.pop();
else
return false;
}
}
return stack.isEmpty();
}
我在某处找到了一个更聪明的解决方案,但无法理解它。
这是代码:
public boolean isValid(String s) {
Stack<Character> stack= new Stack<>();
for(char ch: s.toCharArray()){
if(ch=='(')
stack.push(')');
else if(ch=='{')
stack.push('}');
else if(ch=='[')
stack.push(']');
else if(stack.isEmpty() || stack.pop()!=ch)
return false;
}
return stack.isEmpty();
}
请帮助我理解最后的工作else-if
block.