赞
踩
目录
文章讲解: 代码随想录力扣题目: LeetCode 20. 有效的括号
- class Solution {
- public boolean isValid(String s) {
-
- //定义一个栈对象
- Deque<Character> deque = new LinkedList<>();
- //定义字符character接收字符s的每一个字符
- char character;
-
- //遍历字符串s
- for(int i = 0; i < s.length(); i++){
-
- character = s.charAt(i);
-
- //如果是左符号,push右符号进入栈,为后续出栈寻找相同字符做准备
- if(character == '('){
- deque.push(')');
- }else if(character == '['){
- deque.push(']');
- }else if(character == '{'){
- deque.push('}');
- }else if(deque.isEmpty() || deque.peek() != character){ //这里两种情况不匹配,一种就是右符号多一个或几个,另一种就是符号类型不匹配
- return false;
- }else{ //相同元素就pop出去
- deque.pop();
- }
- }
-
- //循环结束之后,看一看栈里面还有没有元素
- //还有元素,就是左符号多一个或几个
- //没有元素,就证明左右符号匹配成功
- return deque.isEmpty();
- }
- }

文章讲解: 代码随想录
思路分析:
遍历字符串S,首先把字符串S的字符push到栈中,在push的过程中,你要判断栈中是否已经有相同的元素,如果有相同元素则把这个元素pop出去,否则就继续push栈中。
代码如下(Java):
- class Solution {
- public String removeDuplicates(String s) {
-
- ArrayDeque<Character> deque = new ArrayDeque<>();
- char ch;
-
- //遍历字符串s
- for(int i = 0; i < s.length(); i++){
-
- ch = s.charAt(i);
-
- //push元素的时候,需要注意两种情况
- //一种是:当栈里面为空的时候也可以push元素
- //另一种则是:push的时候栈的顶部没有当前准备push的元素
- //判断的时候还要注意这两种判断条件的顺序问题
- if(deque.isEmpty() || deque.peek() != ch){
- deque.push(ch);
- }else{
- deque.pop();
- }
-
- }
-
-
- String str = "";
-
- //由于出栈的时候与要的结果是相反顺序的,所以要进行处理一下
- while(!deque.isEmpty()){
- str = deque.pop() + str;
- }
-
- return str;
- }
- }

总结:这题可以熟悉一下栈的操作,加强对栈的理解。
文章讲解:代码随想录
思路分析:
当遇到数字的时候,就把数字进行入栈;当遇到符号的时候,就在栈pop两个元素出来。
代码如下(Java):
- class Solution {
- public int evalRPN(String[] tokens) {
-
- Deque<Integer> stack = new LinkedList();
-
- //遍历字符串数组tokens,并把值赋给s
- for(String s : tokens){
-
- //逐个匹配并进行相应的操作
- if("+".equal(s)){
- stack.push(stack.pop() + stack.pop());
- }else if("-".equals(s)){
- stack.push(-stack.pop() + stack.pop());
- }else if("*".euqals(s)){
- stack.push(stack.pop() * stack.pop());
- }else if("/".euqals(s)){
- int temp1 = stack.pop();
- int temp2 = stack.pop();
- stack.push(temp2 / temp1);
- }else{
- stack.push(Integer.valueOf(s));
- }
-
- }
-
- return stack.pop();
- }
- }

总结:这几道题目,我们都是先定义个栈对象,然后遍历题目给的字符串或者字符串数组,一边遍历的同时一边进行题目要求的匹配操作,利用栈中的后进先出的规律,进而解决问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。