算法与数据结构 03 匹配问题
- 括号匹配问题
假设表达式中允许包含多种括号 {}、<>、() 和 [] ,以任意方式排列,默认() [] <> {} 全部出现并两两匹配未正确格式,出现一种确实一半为不正确格式。
例如: [ ( { } ) < > ]
12 3 4 5 6 7 8
当计算机接受第一个括号 “[”时,它便期待与之匹配的第八个括号"]"出现,然而计算机是按顺序遍历的,下一个接收到的是第二个括号“(”,此时第一个括号“[” 只能暂时放到一边,第二个括号接收后期待与之匹配的第五个括号“)”出现,同样等来的是第三个括号“{”;以此类推,直到第四个括号“}”被接收后,满足了第三个括号“{” 的期待并与之匹配;继续往后接收,与上面一样,遇到相同的就匹配,不相同的就放到一边接着往下,直到最后一个括号被接收。
这样,上面的例子当最后一个括号被接受完成后,每一个括号都找到了与之相匹配的另一半,这是我们引入栈,遍历过程中将接收到的暂时不匹配的存入栈中,往下遍历遇到与之匹配的就弹栈,最后遍历结束时,看栈是否为空。若不为空,就说明有括号未被匹配;若空,这说明所有括号均能匹配。
代码实现:
public static void main(String[] args) {solution01();solution02();}//利用HashMap算法private static void solution02() {String str = "{()<>[]}";HashMap<Character,Character> map = new HashMap<>();map.put('[',']');map.put('<','>');map.put('(',')');map.put('{','}');ArrayStack<Character> stack = new ArrayStack<>();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (stack.isEmpty()) {stack.push(c);} else {char top = stack.peek();if (map.containsKey(top) && c == map.get(top)) {stack.pop();} else {stack.push(c);}}}System. out.println(stack.isEmpty());}// 利用ACSII编码判断private static void solution01() {String str = "{()[[()]]<>{}()<>}()";ArrayStack<Character> stack = new ArrayStack<>();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);if (stack.isEmpty()) {stack.push(c);} else {char top = stack.peek();if (top - c == -1 || top - c == -2) {stack.pop();} else {stack.push(c);}}}System. out.println(stack.isEmpty());}
}
//输出结果
true
true
- 判断回文
方法一:与括号问题相同的原理
public class JudgingPalindrome01 {public static void main(String[] args) {//引入输入的字符串Scanner scanner = new Scanner(System.in);System. out.println("请输入文本:");String text = scanner.nextLine();//创建一个栈 存储字符数据ArrayStack<Character> stack = new ArrayStack<>();//遍历字符串 做出栈和进栈操作char c ;for (int i = 0; i < text.length(); i++) {//判断长度是否为奇数并做处理if (text.length() % 2 == 1 && text.length() / 2 == i) {continue;}c = text.charAt(i);if (stack.isEmpty()) {stack.push(c);} else {if (c == stack.peek()) {stack.pop();} else {stack.push(c);}}}if (stack.isEmpty()) {System. out.println(text + " is a palindrome");} else {System. out.println(text + " is not a palindrome");}}
}
// 输出结果
请输入文本:
上海自来水来自海上
上海自来水来自海上 is a palindrome请输入文本:
123321
123321 is a palindrome请输入文本:
123456
123456 is not a palindrome
方法二:
输入字符串格式,从字符串两端开始扫描对比
public static void main(String[] args) {System. out.println(solution02());}private static boolean solution02() {String text = "上海自来水来自海上";int i = 0;int j = text.length() - 1;while (true) {if (text.charAt(i) == text.charAt(j)) {i++;j--;} else {return false;}if (i >= j) {return true;}}}
// 输出结果
true
算法与数据结构 03 匹配问题相关推荐
- 详解校招算法与数据结构
算法与数据结构(java)版 一,数据结构 1,数组和链表 (1)数组 数组是最常见的一种数据结构,它是相同类型的用一个标识符封装到一起的基本类型数据序列或者对象序列.数组使用一个统一的数组名和不同的 ...
- jdk7默认gc算法_JDK 7的算法和数据结构
jdk7默认gc算法 在定期检查JDK中是否存在一种或另一种标准算法时,我决定进行这种索引. 有趣的是,为什么其中包含一些著名的数据结构或算法,而其他却没有? 此调查的格式仅涉及JDK的算法和数据结构 ...
- JDK 7的算法和数据结构
在定期检查JDK中是否存在一种或另一种标准算法时,我决定进行这种索引. 有趣的是,为什么其中包含一些著名的数据结构或算法,而另一些却没有? 此调查的格式仅涉及JDK的算法和数据结构的关键特性和功能,所 ...
- 算法与数据结构简单启蒙,我当年学习算法走过的坑
1.碎碎念 我的算法启蒙来自于紫书算法竞赛入门经典,但是不得不说从语言过度到算法,紫书并不是一个很好的开始.当时整本书除了数学和图论其实是看完了的,但真的有印象的大约只有暴力枚举法中枚举排列,子集生成 ...
- 算法与数据结构学习资料及面试
from 算法之美作者: http://blog.csdn.net/tiandijun/article/details/50550056 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录( ...
- 格雷通路 算法 java,Java算法与数据结构教程
北上广容不下肉身, 三四线放不下灵魂, 程序员里没有穷人, 有一种土豪叫 算法工程师. 程序 = 数据结构 + 算法 程序是为了解决实际问题而存在的.然而为了解决问题,必定会使用到某些数据结构以及设计 ...
- 0x00000005 3.数据结构和算法 基础数据结构 字符串(上)
文章目录 基本知识简单总结 模式匹配 最长回文子串 前缀匹配 扩展和补充* C++11常见API References: 字符串也是一个高频考察点. 虽然可以和数组考点合并,但由于该场景许多优化空间大 ...
- 2021最新最全前端面试题(包含HTML、CSS、JavaScript、Vue、React、浏览器、算法与数据结构等)
整理了一些前端面试题,希望对正在找前端工作的伙伴有用.本篇文章内容篇幅较大,主要针对初中级前端开发工程师. 篇幅过长,大家可以先点赞收藏以后慢慢看. 关于HTML 的title和alt属性有什么区别 ...
- 【算法和数据结构学习笔记】整合版
文章目录 算法 前缀和 双指针法 四数之和 分治算法 Offer 58 II 左旋转字符串 回溯算法 动态规划 数据结构 数组 & String & 双指针 字符串 反转字符串 T54 ...
- 面试复试重点 算法与数据结构
算法.数据结构 一:算法 1. 算法的几个特征是什么. 2. 算法复杂性的定义.大O.θ.Ω.小o分别表示的含义. 3. 递归算法的定义.递归算法的两要素. 4. 分治算法的思想,经典的分治算法(全排 ...
最新文章
- JavaAppArguments
- DOM中的outerHTML,innerHTML,outerText,innerText的区别
- git 添加未跟踪的文件
- java内存图解_图解JAVA内存模型(JMM:JAVA Memory Model)
- 分块入门(根据hzwer的博客。。)(右端点是r不是n。。)
- 创业必经之路——Paul Graham创业曲线
- Python入门你要懂哪些?这篇文章总算讲清楚了
- 设计模式--spring源码中使用策略模式(Strategy Pattern)
- 自然语言处理NLP星空智能对话机器人系列:论文解读 How Good is Your Tokenizer? (你的词元分析器有多好?多语言模型的单语性能研究)
- dubbo源码解析(二)springBoot+dubbo案例整合
- WPS Excel表格安装宏插件
- 直击AI场景化实践:在部分行业可取代人工
- ArcGIS超级工具目录
- Git - IDEA中分支右侧上下箭头的含义
- java pgm_如何读取Java中的PGM图像?
- 大师速写作品及理论,有你喜欢的知识
- XML采用Boost::regex解析实例
- VMware如何导出和导入OVF文件
- 【视觉注意力机制】SE、CBAM、ECA三种可插拔注意力模块结构实现与详解
- 计算机二级演示文稿合并PPT,[PPT考点]如何将两个幻灯片合并在一个幻灯片?
热门文章
- Win10系统去掉桌面图标小箭头导致打开管理和任务栏处图标报错,且右键开始菜单无反应
- Py第四问 from test import test1 ImportError:cannot import name 'test1'
- python任务栏都隐藏了_如何隐藏PyQt4 Python应用程序的任务栏图标?
- mysql安装依赖perl(Data::Dumper)
- android 手机如何截屏,安卓手机一般怎么截屏 安卓如何截图手机屏幕 - 云骑士一键重装系统...
- 使用Scrum敏捷开发 —实现多维度碎片化迭代
- CSS改变table内置tbody滚动条
- 四子棋 java_JAVA写的四子棋
- LoadLibraryA加载dll失败
- CF1467C Three Bags(思维)