题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
思路:
这个问题是典型的栈在括号匹配中的应用问题。
1.若当前遍历的字符为正括号则入栈
2若当前遍历的字符为反括号则查看栈顶元素是不是对应的正括号,
2.1若是,则栈顶元素出栈,继续遍历
2.2若不是,则直接返回false
3.遍历完成后,判断栈是否为空,即栈顶是否指向-1,若是则返回true,否则返回false
代码:
class Solution {
public boolean isValid(String s) {
int top = -1;
char[] stack = new char[s.length()];
for(int i=0;i<s.length();i++){
char c = s.charAt(i);
if(c=='('||c=='['||c=='{'){
stack[++top] = c;
}else if(top==-1){
return false;
}else if((c==')'&&stack[top]=='(')||(c==']'&&stack[top]=='[')||(c=='}'&&stack[top]=='{')){
top--;
}else{
return false;
}
}
if(top == -1){
return true;
}
return false;
}
}