3力扣题做题笔记及复盘--20. 有效的括号(栈)
20. 有效的括号 - 力扣(LeetCode)
1、括号匹配是使用栈解决的经典问题。
题意其实就像我们在写代码的过程中,要求括号的顺序是一样的,有左括号,相应的位置必须要有右括号。
如果还记得编译原理的话,编译器在 词法分析的过程中处理括号、花括号等这个符号的逻辑,也是使用了栈这种数据结构。
再举个例子,linux系统中,cd这个进入目录的命令我们应该再熟悉不过了。
cd a/b/c/../../
这个命令最后进入a目录,系统是如何知道进入了a目录呢 ,这就是栈的应用(其实可以出一道相应的面试题了)
所以栈在计算机领域中应用是非常广泛的。
2、思路
如果是左括号就转变成右括号并入栈,如果是右括号就进行栈顶比较,一样就弹栈一个,不一样就return false;最后判断栈是否为空,stack.isEmpty();
3、代码
class Solution { public boolean isValid(String s) { Stack<Character> stack = new Stack<>(); int size = s.length(); for(int i=0;i<size;i++){ char c = s.charAt(i); if(c == '['){ stack.push(']'); }else if(c == '{'){ stack.push('}'); }else if(c == '('){ stack.push(')'); }else if(stack.isEmpty() || c != stack.peek() ){ return false; }else if( c == stack.peek()){ stack.pop(); } } return stack.isEmpty(); } }
4、总结
技巧:匹配问题,将左括号进行转变,然后和右括号进行比较,比较相同不相同。