zoukankan      html  css  js  c++  java
  • 算法一回首之《括号匹配算法》

     

    括号匹配验证:

    一个字符串中,包括字符 ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[‘, ‘]’。 要求写一个函数,验证字符串中这些括号是以正确的顺序匹配的。 注意:(, ), [, ], {, }可以互相嵌套 譬如:"()"、"()[]{}"和"([]{[]})"是正确的,"(]" and "([)]"是不正确的

    Tips:括号是可以嵌套的哦

    实现:

        private static final Map<Character, Character> patternMatch = new ConcurrentHashMap<>();
    ​
        static {
            patternMatch.put('(', ')');
            patternMatch.put('{', '}');
            patternMatch.put('[', ']');
        }
    ​
        /**
         * 1.  括号匹配验证
         * 一个字符串中,包括字符  ‘(‘,  ‘)’,  ‘{‘,  ‘}’,  ‘[‘,  ‘]’。
         * 要求写一个函数,验证字符串中这些括号是以正确的顺序匹配的。
         * 注意:(,  ),  [,  ],  {,  }可以互相嵌套。
         * 譬如:"()"  和"()[]{}"是正确的,"(]"  and  "([)]"是不正确的
         *
         * @return
         */
        public boolean bracketMatch(String bracketSource) {
            if (StringUtils.isBlank(bracketSource)) {
                return false;
            }
            char[] charArray = bracketSource.toCharArray();
            Stack<Character> stack = new Stack<>();
            stack.push(charArray[0]);
            for (int i = 1; i < charArray.length; i++) {
                char next = charArray[i];
                if (stack.isEmpty()) {
                    stack.push(next);
                    continue;
                }
                Character first = stack.peek();
                if (Objects.equals(next, patternMatch.get(first))) {
                    stack.pop();
                } else {
                    stack.push(next);
                }
            }
            return stack.isEmpty();
        }
    福利1:

    二分查找【直接使用JDK中的了,经典无法超越】:

    JDK1.8 java.util.Collections#indexedBinarySearch(java.util.List<? extends java.lang.Comparable<? super T>>, T)

        private static <T>
        int indexedBinarySearch(List<? extends Comparable<? super T>> list, T key) {
            int low = 0;
            int high = list.size()-1;
    ​
            while (low <= high) {
                int mid = (low + high) >>> 1; //>>>:无符号右移,忽略符号位,空位都以0补齐
                Comparable<? super T> midVal = list.get(mid);
                int cmp = midVal.compareTo(key);
    ​
                if (cmp < 0)
                    low = mid + 1;
                else if (cmp > 0)
                    high = mid - 1;
                else
                    return mid; // key found
            }
            return -(low + 1);  // key not found
        }
    福利2:

    冒泡排序:

        /**
         * 冒泡排序:升序
         *
         * @param sourceList
         */
        public void bubbleSort(List<Integer> sourceList) {
            if (sourceList == null || sourceList.isEmpty()) {
                return;
            }
            for (int i = 0; i < sourceList.size(); i++) {
                for (int j = 0; j < sourceList.size() - 1 - i; j++) {
                    if (sourceList.get(j) > sourceList.get(j + 1)) {
                        int tmp = sourceList.get(j);
                        sourceList.set(j, sourceList.get(j + 1));
                        sourceList.set(j + 1, tmp);
                    }
                }
            }
        }

    完成代码见:
    StackDemoExam.java

     https://github.com/helloworldtang/spring-boot-cookbook/blob/v1.0.3-19.1.12/learning-demo/src/main/java/com/tangcheng/learning/exam/SearchExam.java

  • 相关阅读:
    JSP--------------------图书管理器
    Vue-router的基本使用(创建--动态跳转)
    JSP邮箱小案例(完成全部功能)
    Vue CLI3脚手架的使用
    Vue小案例测试-------------------实现购物车小模块
    JSP第六次作业提交~~~~~~~~~~~~~~~~~~~~~
    JSP项目第二阶段(使用数据库存储与注册)
    jsp第三次作业-------------------------------
    2021/4/19作业
    4.12作业
  • 原文地址:https://www.cnblogs.com/softidea/p/10293264.html
Copyright © 2011-2022 走看看