• 有效的括号(leetcode20)


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

    有效字符串需满足:

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

    示例1:

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

    示例2:

    输入:s = "([)]"
    输出:false

    分析:

    使用栈

    当我们遇到一个右括号时,栈顶需要有一个对应的左括号来闭合。

    如果栈中没有左括号或者类型不相同,则字符串无效。

    我们使用哈希表存储每一种括号,其中哈希表的键为右括号,值为相同类型的左括号。

    遍历结束后,如果栈中没有左括号,说明我们将字符串s中的所有左括号闭合,返回true,否则返回false;

    注意到有效字符串的长度一定是偶数,因此如果字符串长度是奇数,直接返回false;

    代码:

    public class leetcode20 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Scanner in = new Scanner(System.in);
            String input = in.nextLine();
            System.out.println(isValid(input));
        }
    
        public static boolean isValid(String s) {
            int n = s.length();
            //如果长度为奇数,则直接返回false
            if(n%2==1){
                return false;
            }
            //用哈希表存储每一种括号,哈希表的键为右括号,值为相同类型的左括号
            Map<Character,Character> pairs = new HashMap<Character,Character>(){
                {
                    put(')','(');
                    put(']','[');
                    put('}','{');
                }
            };
            Stack<Character> stack = new Stack<Character>();
            for(int i=0;i<n;i++){
                char ch = s.charAt(i);
                if(pairs.containsKey(ch)){//字符为右括号时,判断
                    //如果此时栈为空,或者栈顶元素与字符对应哈希表中的值不相同,则返回false
                    if(stack.isEmpty()||stack.peek()!=pairs.get(ch)){
                        return false;
                    }
                    stack.pop();
                }else{//字符为左括号时,加入栈中
                    stack.push(ch);
                }
            }
            return stack.isEmpty();
        }
    }
    
    
  • 相关阅读:
    JavaEE中Filter实现用户登录拦截
    【Tomcat】如何注册Tomcat到Window Service服务
    案例分析:项目组内踢皮球事件
    最大子序列求和问题
    《游戏脚本的设计与开发》-第一部分总结 文字脚本的功能扩展和一个游戏测试
    ajax异步请求实例
    创建用于编译和运行Java程序的批处理文件
    Codeforces Round #189 (Div. 2)
    新的研究方向
    怎样在android实现uc和墨迹天气那样的左右拖动效果
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/14438721.html
Copyright © 2020-2023  润新知