博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法一回首之《括号匹配算法》
阅读量:7246 次
发布时间:2019-06-29

本文共 2845 字,大约阅读时间需要 9 分钟。

 

括号匹配验证:

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

Tips:括号是可以嵌套的哦

实现:

private static final Map
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
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 
int indexedBinarySearch(List
> list, T key) { int low = 0; int high = list.size()-1;​ while (low <= high) { int mid = (low + high) >>> 1; //>>>:无符号右移,忽略符号位,空位都以0补齐 Comparable
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
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); } } } }

完成代码见:

 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

 

转载于:https://www.cnblogs.com/softidea/p/10293264.html

你可能感兴趣的文章
core.async中go的作用研究
查看>>
除法(暴力)
查看>>
Python tornado初探
查看>>
metro 文本文件操作
查看>>
【第46题】【062题库】2019年OCP认证062考试新题
查看>>
1297 硬币
查看>>
ORA-01665 control file is not a standby control file
查看>>
pycharm 文件名不显示中文的解决方法
查看>>
340 - Master-Mind Hints
查看>>
python多进程并发
查看>>
微信分享调用 -- c#篇
查看>>
Python面向对象编程(IDE:Pycharm)
查看>>
@angular/cli项目构建--Dynamic.Form(2)
查看>>
react: menuService
查看>>
无线网卡与本地连接不能同时使用&一机多网络的优先级设置
查看>>
正则表达式
查看>>
BFS模板
查看>>
SQL server 2008(Linux安装)
查看>>
网络编程
查看>>
ThinkPHP快捷函数
查看>>