前言:
括号匹配问题是经典中的经典,是学习栈的经典例题,今天就再解剖一下这一经典例题,且看下文!
利用LeetCode的经典题目,详细揭开括号匹配问题的神秘面纱。
题目链接:有效的括号
题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
算法思想及解析:
注意这一段代码:
括号一定是匹配的,要不然是会出错的。
还有别忘记再判断栈是否为空了
完整代码实现:
1. class Solution { 2. public boolean isValid(String s) { 3. 4. Stack<Character>stack=new Stack<>(); 5. 6. for(int i=0;i<s.length();i++){ 7. char ch=s.charAt(i); 8. if(ch=='('||ch=='['||ch=='{'){//左括号入栈 9. stack.push(ch); 10. }else{ //右括号匹配则出栈,不匹配就是false 11. 12. if(!stack.empty()&&stack.peek().equals(stackOf(ch))){ 13. 14. stack.pop(); 15. 16. }else{ 17. return false; 18. } 19. 20. 21. } 22. 23. } 24. 25. if(stack.empty()){ 26. return true; 27. }else{ 28. return false; 29. } 30. } 31. 32. public char stackOf(char ch){ 33. if(ch==')')return '('; 34. if(ch==']')return '['; 35. return '{'; 36. 37. } 38. }
代码调试无误: