前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode 20. 有效的括号

leetcode 20. 有效的括号

原创
作者头像
一只胡说八道的猴子
修改2020-11-12 11:21:30
2180
修改2020-11-12 11:21:30
举报

题目描述

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"

输出: true

示例 2:

输入: "()[]{}"

输出: true

示例 3:

输入: "(]"

输出: false

示例 4:

输入: "()"

输出: false

示例 5:

输入: "{[]}"

输出: true

题解1

import java.util.Scanner;

import java.util.Stack;



public class leetcode20 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        String str = scanner.next();

        boolean valid = isValid(str);

        System.out.println(valid);



    }

    public static boolean isValid(String s) {

        int length = s.length();

        if (length%2==1){

            return  false;

        }

        Stack<String> left = new Stack<>();

        char[] chars = s.toCharArray();

        for (char aChar : chars) {

            String single = String.valueOf(aChar);

            if ("(".equals(single)||"{".equals(single)||"[".equals(single)){

                left.push(single);

            }else{



                if (left.size()==0){

                    return  false;

                }

                String rightsingle = left.pop();

                if (")".equals(single)){

                  if (!"(".equals(rightsingle)){

                      return false;

                  }



                }else   if ("}".equals(single)){

                    if (!"{".equals(rightsingle)){

                        return false;

                    }



                }else   if ("]".equals(single)){

                    if (!"[".equals(rightsingle)){

                        return false;

                    }

                  ;

                }

            }

        }

        if (left.size()!=0){

            return  false;

        }

        return  true;

    }

}

题解二

import java.util.\*;



public class leetcode20version3 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        String str = scanner.next();

        boolean valid = isValid(str);

        System.out.println(valid);

    }

    public static boolean isValid(String s){

        int n = s.length();

        if (n % 2 == 1) {

            return false;

        }



        Map<Character, Character> pairs = new HashMap<Character, Character>() {{

            put(')', '(');

            put(']', '[');

            put('}', '{');

        }};

        Deque<Character> stack = new LinkedList<Character>();

        for (int i = 0; i < n; i++) {

            char ch = s.charAt(i);

            if (pairs.containsKey(ch)) {

                if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {

                    return false;

                }

                stack.pop();

            } else {

                stack.push(ch);

            }

        }

        return stack.isEmpty();





    }

}

以上就是leetcode 20. 有效的括号的题解,如有帮助还请点赞关注支持,如有疑问评论私信都可,看到后可帮助解答本博客主要侧重于数据结构于算法和java开发,操作系统,计算机网络,觉得我的文章有帮助的小伙伴可以关注我,有疑问可评论私信,相逢即是缘,大家高处见

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 题解1
  • 题解二
  • 以上就是leetcode 20. 有效的括号的题解,如有帮助还请点赞关注支持,如有疑问评论私信都可,看到后可帮助解答本博客主要侧重于数据结构于算法和java开发,操作系统,计算机网络,觉得我的文章有帮助的小伙伴可以关注我,有疑问可评论私信,相逢即是缘,大家高处见
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档