问题描述
题目分析
1.((( ) 左括号多
2.( ))) 右括号多
3.( [ ) ] 左右括号不匹配
4.() 匹配
给了一个字符串,遍历字符串
第一步:
如果是左括号就入栈
第二步:
如果是右括号,看一下栈顶元素和右括号匹不匹配,匹配就出栈
代码步骤
第一步:
遍历字符串
第二步:
创建栈
第三步:
判断是不是左括号,是的话入栈
第四步:
是右括号的话判断栈是不是空,空的话直接返回false
第五步:
获取一下栈顶元素,看看是哪个左括号
第六步:
判断一下top左括号是不是与右括号匹配,匹配就弹出栈顶元素
第七步:如果if里面没有一个满足的,那说明左右括号不匹配
第八步:
for循环走完如果栈还不为空,说明左括号多,返回false
第九步:
所有false都没有return出去,说明匹配
完整代码
class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); for(int i = 0; i< s.length(); i++){ char ch = s.charAt(i); if(ch == '(' || ch == '[' || ch == '{' ){ //如果是左括号直接入栈 stack.push(ch); }else{ //遇到右括号 if(stack.empty()){ //说明右括号多 return false; } char top = stack.peek(); if(top =='(' && ch ==')' || top =='[' && ch ==']' || top =='{' && ch =='}'){ stack.pop(); }else{ return false; } } } if(!stack.empty()){ return false; } return true; } }