自学内容网 自学内容网

Leetcode面试经典150题-20.有效的括号

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([])"

输出:true

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

这个题是非常基础的栈的使用,其他的就不多说了,上代码,看不懂的请留言或者私信,收到第一时间解答

class Solution {
    /**非常简单的题,整体思想就是用个栈,如果是左括号就入栈,如果是右括号就弹出
    如果弹出的不是自己对应的左括号,直接失败
    如果最后栈为空就是成功,如果不是空就是失败了 */
    public boolean isValid(String s) {
        /**不是2的整数倍,不可能是有效的 */
        if(s.length() % 2 == 1) {
            return false;
        }
        /**转成字符数组*/
        char[] sArr = s.toCharArray();
        /**定义栈*/
        Stack<Character> stack = new Stack<>();
        for(char c : sArr) {
            if(c == '(' || c == '[' ||c == '{') {
                /**如果是左括号放入对应的右括号,这样右括号的时候直接判断是否相等就行了 */
                stack.push(c == '('?')':c == '['?']' : '}');
            } else {
                /**栈为空肯定找不到对应的,如果弹出来的不对应也匹配不上 */
                if(stack.isEmpty() || stack.pop() != c) {
                    return false;
                } 
            }
        }
        /**配对即弹出,如果最后弹空了,说明都对上了 */
        return stack.isEmpty();
    }
}


原文地址:https://blog.csdn.net/Chang_Yafei/article/details/142312772

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!