题目描述
给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。
解析:
1.用栈实现括号匹配:
依次扫描所有字符,遇到左括号入栈,遇到右括号则弹出栈顶元素检查是否匹配。
2.匹配失败情况:
- 左括号多
- 右括号多
- 左右括号不匹配
import java.util.*; import java.util.Stack; public class Solution { /** * * @param s string字符串 * @return bool布尔型 */ public boolean isValid (String s) { // write code here Stack<Character> stack=new Stack<Character>(); if(s.length()==0 || s==null){ return false; } for(int i=0;i<s.length();i++){ char c=s.charAt(i); if( c=='(' || c=='[' || c=='{'){ stack.push(c); } else{ if(stack.isEmpty()){ return false; } char topchar=stack.pop(); if(c==')' && topchar!='('){ return false; } if(c==']' && topchar!='['){ return false; } if(c=='}' && topchar!='{'){ return false; } } } //如果遍历完字符串后,栈不为空,则说明括号不匹配 return stack.isEmpty(); } }