栈实现(Java)
核心思想: 利用栈来实现括号的匹配过程中,如果是左括号‘(’、‘[’和‘{’,则进栈,如果是右括号‘)’、‘]’和‘}’,则出栈(注意先判断栈是否为空),并判断出栈的左括号与当前右括号是否匹配,最后判断栈中是否还有尚未匹配成功而出栈的左括号,若有,则匹配失败,否则,匹配成功。
class Solution {
public boolean isValid(String s) {
//若字符串s的字符个数为奇数,则肯定匹配失败,否则,可能匹配成功
if(s.length() % 2 == 1)
return false;
Stack<Character> stack = new Stack<>();
int index = 0;
while(index < s.length()){
switch (s.charAt(index)){
//如果是左括号‘(’、‘[’和‘{’,则进栈
case '(':
stack.push(s.charAt(index));
break;
case '[':
stack.push(s.charAt(index));
break;
case '{':
stack.push(s.charAt(index));
break;
//如果是右括号‘)’、‘]’和‘}’,则出栈(注意先判断栈是否为空),并判断出栈的左括号与当前右括号是否匹配
case ')':
char ch_small = ' ';
if(!stack.empty())
ch_small = stack.pop();
if(ch_small != '(')
return false;
break;
case ']':
char ch_middle = ' ';
if(!stack.empty())
ch_middle = stack.pop();
if(ch_middle != '[')
return false;
break;
case '}':
char ch_big = ' ';
if(!stack.empty())
ch_big = stack.pop();
if(ch_big != '{')
return false;
break;
default:
break;
}
index++;//匹配字符串s的下一个字符
}
//最后判断栈中是否还有尚未匹配成功而出栈的左括号
return stack.empty();
}
}