题目20:有效的括号
解题思路:
1、采用数据结构“栈”的特性来解决。栈是先进先出的,如果是左括号,我们就压栈,如果是右括号,则取栈顶的元素,如果是对应的右括号,则有效。否则或者为空则无效。
2、如果字符串S中的所有字符都循环完了,发现栈中还有元素,此时也是无效的。
算法代码:
public boolean isValid(String s) {
if(s.length()==0){
// 字符串为空
return true;
}
// 定义栈
Stack<Character> stack = new Stack<>();
for (char ch : s.toCharArray()){
if('(' == ch || '{' == ch || '[' == ch){
// 左括号压栈
stack.push(ch);
}else{
// 右括号看是否匹配左括号
if(stack.isEmpty()){
// 栈中无元素,无法匹配,字符串无效
return false;
}else{
// 取栈顶元素,判断是否匹配,不匹配返回无效
Character pop = stack.pop();
if (ch==')'){
if(pop!='('){
return false;
}
}
if (ch=='}'){
if(pop!='{'){
return false;
}
}
if (ch==']'){
if(pop!='['){
return false;
}
}
}
}
}
// 字符串循环结束,若栈非空,则无效。否则有效。
return stack.isEmpty()?true:false;
}