题目:检验符号是否匹配. '['和']', '('和')'成对出现时字符串合法. 例如"[][]()", "[[([]([])()[])]]"是合法的; "([(])", "[())"是不合法的.

遍历字符串的每一个char, 将char与栈顶元素比较. 如果char和栈顶元素配对, 则char不入栈, 否则将char入栈. 当遍历完成时栈为空说明字符串是合法的.

代码如下:

package MyArrayStack;

public class MyArrayStack {

//定义类,使用一个缺省泛型控制输出对象

private Object[] objs=new Object[16];//实例化一个数组,作为栈的实体对象

private int size=0;

//定义一个int变量,用于作为插入弹出的标记,size始终指向可以插入的位置,初始化为0,栈空

//判断栈空

public boolean isEmpty(){

return size==0; //如果栈空返回1,否则返回0

}

//清空栈

public void clear(){

for(int i=0;i

objs[size]=null;

}

size=0;

}

//返回栈的长度

public int length(){

return size;

}

//压栈操作

public boolean push(T data){

if(size>=objs.length){ //如果size>当前栈长度,调用扩容方法

resize();

}

objs[size]=data; //将当前元素赋值到栈中

size++;//size移动到新的位置

return true;

}

//出栈操作

@SuppressWarnings("unchecked")

public T pop(){

if(size==0){

return null; //如果栈长为0,返回空

}

size--; //现将size指向有值的位置

return (T) objs[size]; //取出size,这时不需移动size位置。

}

//扩容栈

private void resize(){

Object[] temp=new Object[objs.length*3/2+1]; //先将栈的实际容量扩大为原来的1.5倍

for(int i=0;i

temp[i]=objs[i]; //将原有元素赋值到temp中

objs[i]=null; //原栈元素置空

}

objs=temp; //将temp赋值到objs中,使之成为新的栈元素

}

public String toString(){

StringBuilder sb=new StringBuilder();

sb.append("MyArrayStack:[");

for(int i=0;i

sb.append(objs[i].toString());

if(i!=size-1){

sb.append(",");

}

}

sb.append("]");

return sb.toString();

}

public static void main(String[] args){

//使用字符类Character声明泛型

MyArrayStackms=new MyArrayStack();

String s="{{}}()(){({){}}}";

char[] a=s.toCharArray();

for(int i=0;i

Character t=ms.pop();

//每次会先出栈当前的栈顶元素

if(t==null){

ms.push(a[i]);

}

else if(t=='{'&&a[i]=='}'){

//如果匹配,就不进行动作处理,栈顶元素已经出栈

}else if(t=='('&&a[i]==')'){

}

else{

//不匹配的话,将栈顶元素和新元素一起出栈

ms.push(t);

ms.push(a[i]);

}

/*String s1=ms.toString();

System.out.println(s1);*/

}

if(ms.length()==0){

System.out.println("YES");

}else{

System.out.println("NO");

}

}

}

括号匹配算法 java_使用栈实现括号匹配算法-java相关推荐

  1. 字符串匹配算法Java_如何简单理解字符串匹配算法?

    这篇文章来说说如何简单理解KMP,BM算法.之前看过一些文章说,KMP算法很难理解. 可我并不觉得. 我反而觉得它容易理解.平时我们写java代码的时候, 判断一个字符串是否存在包含另一个字符串都是直 ...

  2. 括号匹配算法 java_括号匹配算法

    括号匹配算法 题目来自网络搜集和常考算法,如有侵权请联系我 题目描述 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的 ...

  3. python括号匹配算法_使用Python的栈实现括号匹配算法

    利用Python列表实现一个栈的结构,再使用栈实现括号匹配的算法,所谓的括号匹配是指在编程语言中,括号是成对出现的,最先出现的左括号,对应于最后的右括号,后出现的左括号对应于最新右括号,符合栈的特征 ...

  4. 【数据结构】【栈】括号匹配算法(可直接运行)

    文章目录 1.算法问题 2.算法思路 3.算法实现 4.完整代码 5.运行结果 1.算法问题 假设表达式中允许包含三种括号:().[].{},其嵌套的顺序任意,即([]{})或[()[]{}]等均为正 ...

  5. C语言详解括号匹配问题(栈的应用 )

    文章目录 问题概述 算法思路 不匹配的情况 实现流程图 C语言代码 结果测试 问题概述 检测括号是否成对出现 最后出现的左括号最先匹配(LIFO),和栈的后进先出异曲同工 每出现一个右括号,就抵消(出 ...

  6. python 判断括号是否匹配_使用Python实现一个栈判断括号是否平衡

    栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...

  7. 顺序栈实现括号匹配的检验(C语言实现)【栈】

    原理说明 算法思路 代码演示 原理说明 假设表达式中允许括号嵌套,则检验括号是否匹配的方法可用"期待的急迫程度"这个概念来描述. 我们下面给和例子进行说明: 可能出现的不匹配的情况 ...

  8. 六十三、栈在括号匹配和表达式求值中的应用

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 算法,一门既不容易入门,也不容易精通的学问. 文章目录 括号匹配 数 ...

  9. python中用函数设计栈的括号匹配问题_数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题...

    算法 数据结构 数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等.如 ...

最新文章

  1. 手机照片导入电脑步骤_手机录屏及电脑录屏操作步骤
  2. 使用Java进行查询hugegraph_HugeGraph Examples
  3. elasticdump elasticsearch数据备份与迁移 导入导出
  4. P2转P3'dict' object has no attribute 'has_key'
  5. cuSPAESE库:(五)零基索引和一基索引
  6. 银河水滴张曼:远距离步态识别系统与应用 |量子位沙龙回顾
  7. QTP模拟鼠标和键盘事件整理
  8. Jmeter的Throughput有误差与分布式测试时的坑
  9. Netty中有哪些自带的ChannelHandler?
  10. mysql 字符串 反转_MySQL笔记之字符串函数的应用
  11. 【优化求解】基于matlab粒子群算法求解函数极值问题【含Matlab源码 1202期】
  12. 无人驾驶智能车竞速赛,智能大会无人驾驶比赛
  13. 基于质谱的蛋白质鉴定,第3节:基于MALDI-MS肽指纹图谱的蛋白质质谱鉴定
  14. 最全面的应届毕业生落户上海指南(2021)
  15. Java如何发起http请求
  16. mybatis自定义枚举类型的转换器以及各种使用场景
  17. 无法同步因计算机未授权,iTunes无法授权和同步解决办法教程
  18. 徐无忌MySQL笔记:MySQL数据库锁有几种?实现原理是什么?
  19. 核磁共振 Nuclear Magnetic Resonance (NMR), H1-NMR, C13-NMR, DEPT, COSY 等分析技术
  20. Python爬取梨视频并下载【ajax抓包】

热门文章

  1. 中南大学计算机有网络安全,中南大学2019年大学生网络安全知识竞赛(复赛)成功举行...
  2. centos6.5 mysql下载_Centos6.5在线安装mysql 8.0详细教程
  3. asp.net 添加成功弹出个div提示_Word双栏目录怎么做,这3个步骤早知道,让人眼前一亮...
  4. linux pxe获取ip,linux pxe的构建
  5. 微信内测版抢先体验,可发 4K 无损视频
  6. 年会抽奖程序准备好了吗?没有的话,直接来取!
  7. 你应该知道的7个写出更好的 Java 代码的技巧
  8. 通过mtd读写flash_Ambiq继续引领低功耗单片机,新款Apollo4将2MB MRAM作为Flash
  9. rm 空间不释放_rm删除文件之后,空间就被释放了吗?
  10. 表格全屏显示_2020-2026年中国手机显示屏市场现状研究分析与发展前景预测报告...