【字符串】-Lc20-有效的括号(借助栈解决匹配问题)

文章介绍了如何使用Java编程语言和栈数据结构解决判断括号字符串有效性的算法问题,通过实例和代码展示了如何通过遍历并利用栈来检查左括号与右括号的配对和顺序。
摘要由CSDN通过智能技术生成

写在前面

  最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。



一、场景描述

  给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。

有效字符串需要满足:
1.左括号必须用相同类型的右括号闭合
2.左括号必须以正确的顺序闭合
3.注意空字符串可被认为是有效字符串

示例 1:
输入: "()"
输出: true

示例 2:
输入: "()[]{}"
输出: true

示例 3:
输入: "(]"
输出: false

示例 4:
输入: "([)]"
输出: false

示例 5:
输入: "{[]}"
输出: true

二、具体步骤

1.环境说明

名称说明
IntelliJ IDEA2019.2

2.代码

以下为Java版本实现:

public class Lc20_isValid {

    public static void main(String[] args) {
        String s = "{[]}";
//        String s = "([)]";
        System.out.println(isValid(s));
    }

    /**
     * 思路:
     * 返回值是boolean
     *
     * 这种匹配的操作可以借助栈操作
     *
     * 定义一个栈结构s: Stack
     * 循环字符str.toCharArray(),
     * 如果ch是 ({[,对应 )}] 入栈
     * 否则栈为empty,或者出栈pop和ch比对不相等为false。 stack.isEmpty || s.pop != ch
     *
     * 最后根据栈是否为空,返回 boolean
     *
     * @param s
     * @return
     */
    private static boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (char ch : s.toCharArray()) {
            if (ch == '(') {
                stack.push(')');
            } else if (ch == '[') {
                stack.push(']');
            } else if (ch == '{') {
                stack.push('}');
            } else if (stack.isEmpty() || stack.pop() != ch){
                return false;
            }
        }

        return stack.isEmpty();
    }
}


写在后面

  如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值