题目:有效括号
题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
样例展示:
输入:s = "()" 输出:true输入:s = "(]" 输出:false
辅助工具:栈(stack)。
我们将读取到的符号依次入栈,栈具有先进后出的特性,一旦左右括号匹配成功,则 pop出栈,全部顺利匹配成功,栈中无元素,才返回true,其余皆false。
我们为什么会想到栈呢?
例如当出现 '(' '(' ')' 时,我们要怎么告诉计算机右边括号是和哪个左括号进行匹配呢,而利用栈就能保证依次有序的对元素进行匹配
代码展示:
class Solution {
public boolean isValid(String s) {
char [] c = s.toCharArray(); //将字符转换成字符数组
Stack<Character> stack = new Stack<>();
for(char ch:c) {
if(ch=='(' || ch=='{' || ch=='[') {
stack.push(ch); //入栈
}
else if(ch==')') {
if(stack.isEmpty() ||stack.pop()!= '(' ) {
return false;
}
}else if(ch=='}') {
if(stack.isEmpty() ||stack.pop()!='{'){ //栈为空则无匹配项
return false;
}
}else if(ch==']') {
if(stack.isEmpty() ||stack.pop()!='['){
return false;
}
}
}
return stack.isEmpty()? true :false ; //判断是否全部匹配成功
}
}