Hot-Leecode 5:栈——有效的括号(20)

  • 最近一个是工作,一个是在学习python,有段时间没做算法题了,今天来继续尝试做做题,来提升自己的代码熟练度。
  • 第二个是最近也是学到的,在做算法题时,一定要先分析题目,给出解题思路再去给出代码实现。

分析

  • 这题用什么去做好:需要左右括号匹配,那可以用栈,左括号就入栈,右括号去和栈顶元素匹配,匹配到了就出栈,直到栈内为空,否则字符串无效。
  • 考虑右括号匹配出栈的几种可能:

(1)如果栈为空,右括号无左括号匹配,字符串无效

(2)如果右括号']'不匹配左括号'{',字符串无效

(3)如果右括号匹配,就将当前栈顶元素弹出,继续处理下一个字符。

java代码实现

import java.util.Stack;

class Solution {
    public boolean isValid(String s) {
        //创建一个空栈
        Stack<Character> stack=new Stack<Character>();
        //字符串是一个字符序列(String类),可以通过toCharArray()方法将其转换为字符数组(char[]),然后循环遍历数组中的每个字符。
        for(char c: s.toCharArray()){
            //只要是左括号就推入栈中
            if(c == '(' || c=='{' || c=='['){
                //对于入栈和出栈用的是push和pop,add是用于将元素添加到集合的末尾(或指定位置),并且它返回一个布尔值,指示添加是否成功。
                stack.push(c);
            }else {
                // 如果栈为空,右括号无左括号匹配
                if(stack.isEmpty()){
                    return false;
                }
                //如果右括号不匹配左括号/栈顶元素
                char top=stack.pop();
                if(c==')'&&top!='(' || c=='}'&&top!='{' || c==']'&&top!='['){
                    return false;
                }
            }
        }
        //如果栈为空,字符串是有效
        return stack.isEmpty();
    }
}

python代码实现

class Solution:
    def isValid(self, s:str) -> bool:
        # 创建一个空栈
        stack=[]

        # 把java代码的逻辑改成python代码的格式
        for c in s:
            # 栈是三种左括号就入栈
            if (c=='(' or c=='{' or c=='['):
                stack.append(c)
            else:
                # 栈是空,直接return false
                if not stack:
                    return False
                top=stack.pop()
                #右括号与栈顶左括号不匹配
                if(c==']' and top!='[') or (c=='}' and top!='{') or (c==')' and top!='('):
                    return False

        # 栈为空,字符有效,返回True;否则返回False
        return not stack
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值