括号匹配问题

括号匹配问题SWUSTOJ962 题目链接:962: 括号匹配问题 思路: 栈的应用: 遇到左括号入栈 遇到右括号,栈空则跳出循环,反之比较栈顶元素是否匹配,不匹配跳出循环 代码: #include <bits/stdc++.h> using namespace std; int main() { char s[500]; cin>>s; stack <char> p;... 阅读详情

No.1:问题描述

有一段字符串序列,其中只含有' [ ',' ] ',' ( ',‘ ) ’四种括号,现在需要判断一下这个字符串序列中的括号是否配对。

No.2:程序输入

第一行输入数n,表示有n条测试字符串,n > 0。

接下来输入每组非空测试字符串,字符串长度<10000。

No.3:程序输出

如果字符串中的括号配对则输出Yes,如果不配对则输出No。

No.4:问题解决

检查序列中的括号是否配对的策略,如下:
1. 遍历序列中的每一个括号
2. 若序列中第一个括号为右括号,则序列不配对,程序结束
3. 若扫描到的括号为左括号,则让该括号入栈
4. 若扫描到的括号为右括号,若此时栈顶的左括号与其配对,则让栈顶元素出栈,扫描下一个元素
5. 若扫描到的括号为右括号,若此时栈顶的左括号与其不配对,则序列中左括号多于右括号,序列不配对,程序结束
6. 若扫描到的括号为右括号,若此时栈已空,则序列中左括号少于右括号,序列不配对,程序结束
7. 在扫描结束后,如果栈已空,则序列配对

No.5:栈的定义

定义一个栈,实现了入栈、出栈、获取栈顶元素、判断栈空、打印栈中元素等基本功能。

class Stack {
	
	/**
	 * 栈的初始化
	 * @param size 栈大小
	 */
	public Stack(int size) {
		this.data = new char[size];
		p = -1;
	}
	
	/**
	 * 判断栈是否为空
	 * @return 若空返回true,否则,返回false
	 */
	public boolean isEmpty() {
		if(p < 0) {
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * 获取栈顶元素
	 * @return 栈顶元素值
	 */
	public char getTop() {
		if(p > -1) {
			return data[p];
		} else {
			return '0';
		}
	}
	
	/**
	 * 出栈
	 */
	public void pop() {
		if(p >= 0) {
			--p;
		} else {
			System.err.println("栈空!");
		}
	}
	
	/**
	 * 入栈
	 * @param c 需要入栈的元素
	 */
	public void push(char c) {
		if(p < data.length - 1) {
			++p;
			data[p] = c;
		} else {
			System.err.println("栈满!");
		}
	}
	
	/**
	 * 打印栈中的元素
	 */
	public void printStack() {
		if(!isEmpty()) {
			for(int i=0; i<=p; ++i) {
				System.out.print(data[i] + " ");
			}
			System.out.println();
		} else {
			System.err.println("栈空!");
		}
	}
	
	private char[] data;//栈的结构
	private int p;//栈顶指针
}

No.6:程序入口

定义Java主函数,按照步骤4所阐述的策略对括号字符串进行检查。

public static void main(String[] args) {
	BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	try {
		int group = Integer.parseInt(in.readLine());
		boolean flag;
		char[] c;
		Stack s;
		while(group > 0) {
			flag = true;
			c = in.readLine().trim().toCharArray();
			s = new Stack(c.length);
			if(c[0] == '[' || c[0] == '(') {
				s.push(c[0]);
				for(int i=1; i<c.length; ++i) {
					
					//当前字符为左括号,则入栈
					if(c[i] == '[' || c[i] == '(') {
						s.push(c[i]);
					}
					
					//当前字符串为右括号,且栈顶元素为左括号,则出栈,进入下次循环
					if((c[i] == ']' && s.getTop() == '[') || (c[i] == ')' && s.getTop() == '(')) {
						s.pop();
						continue;
					}
					
					//左括号多于右括号
					if((c[i] == ']' && s.getTop() == '(') || (c[i] == ')' && s.getTop() == '[')) {
						flag = false;
						break;
					}
					
					//右括号多于左括号
					if(c[i] == ']' || c[i] == ')') {
						if(s.isEmpty()) {
							flag = false;
							break;
						}
					}
				}
			} else {
				flag = false;
			}
			
			//遍历结束栈不空,则括号不配对
			if(!s.isEmpty()) {
				flag = false;
			}
			
			if(flag) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
			--group;
		}
		in.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

No.7:测试效果

测试5组数据效果如下:


动态欧拉角与静态欧拉角:从理论到实践的深度解析 本文深度解析了动态欧拉角与静态欧拉角的核心区别与应用场景。静态欧拉角基于固定世界坐标系,适用于全局导航与三维场景编辑;而动态欧拉角基于物体自身坐标系,更符合飞行模拟、机器人控制等直觉操作,但需警惕其固有的万向节死锁问题。文章通过理论结合实战,帮助开发者在机器人、无人机及图形学项目中正确选用与处理旋转表示。 阅读详情

相关推荐

《涨知识啦29》-DBR的工作原理及其在VCSEL中的作用

分布式布拉格(Distributed Bragg Reflection,简称DBR)反射镜是垂直腔面发射激光器(Vertical-Cavity Surface-Emitting Laser,简称VCSEL)的重要组成部分。典型的DBR反射镜是由1/4ni波长厚度的高折射率和低折射率材料交替组成(ni是该层的折射率)。其反射率取决于组成对数、边界条件以及折射率差。 图1 布拉格反射镜的工作原理 DBR反射镜的工作原理如图1所示。根据反射原理,当光从光疏介质n1射向光密介质n2(折射率n2>n1)时,反

simucal的博客 7983

数据结构实训

6-1 两顶点之前有路径吗? (20 分) 对于给定的无向图及两个图中的顶点,请实现一个函数,分别打印包含这两个顶点的连通分量中的顶点数,并判断这两个顶点之间是否有路径。 函数接口定义: int hasPath(struct Graph *g, int v, int w); 其中v和w是顶点 图定义如下: #define MaxVertexNum 20 /* 最大顶点数 */ struct Graph{ int v; /* 顶点数量 */ int Adj[MaxVertexNu

Endeavo_r 1749

断点回归(regression discontinuity design)学习笔记

本篇博文主要是对断点回归的一些学习和总结~ 学习材料如下: 1 断点回归设计RDD分类与操作案例 2 RDD断点回归, Stata程序百科全书式的宝典 3 断点回归设计的前沿研究现状, RDD 4 让“跳跃”更有意义:断点回归设计(RDD) 5 Stata: 断点回归 (RDD) 教程 6 怎么用通俗的语言解释断点回归?它与DID的区别是什么 7 Watering Down Environmental Regulation in China,Guojun He, Shaoda Wang, Bing Zhan

Claire_chen_jia的博客 9万+

7-2 括号匹配 (11 分) 数据结构实验二:特殊线性表的应用

7-2 括号匹配 (11 分) 给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。 输入格式: 输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。 输出格式: 如果括号配对,输出yes,否则输出no。 输入样例1: sin(10+20) 输出样例1: yes 输入样例2: {[}] 输出样例2: no 答案代码: #include<stdio

qq_hua_xia的博客 2288

Android 系统低内存lowmemorykiller关于阈值修改 minfreeAbsKbytes优化

在系统rom定制化开发中,在对于运行内存ram 1G和2G的设备中,对于内存使用高峰期时,minfreeAbsKbytes优化很关键 调整合理的minfree,让内存合理的使用很关键,接下来分析相关功能的实现

安卓兼职framework和app工程师的博客 524

基于Xilinx K7-410T的高速DAC之AD9129开发笔记(一)

引言:从本文开始,我们介绍下项目中设计的并行LVDS高速DAC接口设计,包括DAC与FPGA硬件接口设计、软件设计等。项目设计高速DAC采用了ADI公司的AD9129,该芯片最大更新速率5.7Gsps,该芯片在宽带通信应用、LTE、雷达信号产生、干扰机等领域有广泛应用。

FPGA_Designer 2535

重启c语言— 括号匹配

7-2 括号匹配 给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。 输入格式: 输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。 输出格式: 如果括号配对,输出yes,否则输出no。 输入样例1: sin(10+20) 输出样例1: yes 输入样例2: {[}] 输出样例...

啥也不会的博客 782

【软考高级架构】论文范文12——论生成式AI在软件开发中的应用与挑战

随着生成式AI技术的跨越式发展,以大语言模型为代表的生成式AI正在深刻改变软件开发的传统模式。在代码生成、测试构造、文档编写等环节,生成式AI展现出显著的效率提升潜力,但其应用也面临着代码质量不可控、安全漏洞植入、版权合规等严峻挑战。本文以笔者主导的某大型金融企业智能研发辅助平台建设项目为案例,围绕生成式AI在软件开发中的应用实践与应对挑战的策略展开论述。笔者担任系统架构师,负责平台架构设计、模型选型、质量保障机制及安全防线构建。

qq837993702的博客 275

2-括号配对问题

#include<stdio.h> #include<string.h> int main() { int len,N,i,j,sum,t; char a[10001],s[10001]; scanf("%d",&N); while(N--) { scanf("%s",s); len=strlen(s); sum=0; if(len%2!=0) printf(...

weixin_43958964的博客 401

SAP 中租赁资产的实现需区分经营租赁与融资租赁,核心围绕资产主数据配置、折旧与利息设置、科目分配及业务操作展开

摘要:SAP系统租赁资产管理需区分经营租赁与融资租赁,通过SPRO配置资产主数据、折旧范围、利息计算及科目分配。关键步骤包括:激活折旧范围利息计算(OABZ)、设置租赁资产类别(OAYZ)、维护总账科目(AO90)及创建租赁资产主数据(AS01)。业务操作涵盖资产资本化(ABZON)、折旧利息过账(AFAB)、租金支付(F-53)及终止处理(ABUMN)。核心配置要点在于准确设置租赁类型、利率参数和科目联动,确保系统自动计算折旧与利息并生成正确凭证。

金牌架构师 1073

Far planner 部署真实小车 & 树莓派部署lego_loam

今天开一贴Far planner的部署,也算是lego loam的部署吧 因为state_estimation用的是lego loam小车底盘: 轮趣的mini差速底盘外加多一层钢板,中间层用来放velodyne的电池(小的电池还没到,大的电池塞不进去目前)和velodyne信号盒子。前面还可以加一个相机。底层用来放小车的电池和马达等设备了,底层不用动。最上面一层用来安装velodyne16线雷达,需要额外钻孔(如果买轮趣的话可以找老板钻个孔?我也不确定,我自己钻的)。 雷达固定螺丝用的是 1/4-20*3

博客 4303

【经典问题】括号匹配问题

文章目录前言例题算法思想算法举例代码栈类括号匹配核心算法完整代码运行结果 前言 括号匹配问题算是栈应用中比较经典的问题了,在数据结构的书中还有各种考试中会出现。最近刷题的时候也遇到了,就想写一篇文章整理一下。 例题 题目来自Leetcode中国 给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效。 有效字符串需满足: 1、左括号必须用相同类型的右括号闭合。 2、左括号必须以正确的...

mgsky1的博客 4万+

【Claude】Invalid model / Opus not available 错误:模型不可用的原因 bug报错已解决

使用 Claude API 时,指定错误或不可用的模型 ID 会收到 Invalid model 错误。本文从模型命名规则出发,给出模型降级链与动态选择方案。

博客 7915

数据结构题——括号匹配问题

括号匹配问题是栈应用的一个经典场景,原理比较简单: 括号匹配原理 假设表达式中允许包含两种括号:圆括号和方括号,其嵌入的顺序随意,即([ ] ( ))或[([ ] [ ])]等为正确的格式,[(])或([())或(())]均为不正确的格式。检验括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。 由此,在算法中设置一个栈,每读入一个括号,若是右括号,则或者使置于栈顶的最击破...

qq_36805270的博客 9673

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

括号匹配问题的总结

括号匹配问题有若干种,这里分析其中一种括号里有数字有字符,然后求的最终结果的问题。 给出两道例题,Leetcode224和Leetcode394。 Leetcode224 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。 示例 输入: "(1+(4+5+2)-3)+(6+8)" 输出: ...

我的心里只有代码 1123

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

用栈实现括号匹配问题

栈结构具有后进先出的特点。括号匹配问题描述:若表达式中包含三种括号:圆括号、方括号和花括号,它们可以相互嵌套。 算法思想:检验算法中可设置一个栈,每读入一个括号,若是左括号,则直接进栈,等待相匹配的同类右括号;若读入的是右括号,且与当前栈顶左括号同类型,则二者匹配,将栈顶的左括号弹出,否则属于不合法情况。另外。如果输入序列已经读完,而栈中仍有等待匹配的左括号,或者读入一个右括号,而栈中已无等待匹...

团子7号 7545

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

堆栈应用——括号匹配问题

假设一个算术表达式中包含圆括号()、方括号[]和花括号{}三类括号,要求判断表达式中括号是否正确匹配配对。 分析:括号匹配符号后到的括号要最先被匹配,所以满足栈“后进先出”的特点。 括号匹配共有四种情况:(1)左右括号配对次序不正确,即存在类似“(]”这种情况;(2)右括号多于左括号;(3)左括号多于右括号;(4)匹配正确。 综上:我们可以存储表达式的字符串并按顺序扫描,进行匹配。顺序栈和链

QS_Sun_24的博客 2538

python用栈实现括号匹配问题

问题描述: 给定一个字符串文字,里面可能含有"()","[]","{}"三种 括号,判断字符串中的括号是否都成对出现*** 思路分析: 如果括号正确匹配,肯定满足: 1、一对正确匹配的括号,一定先出现左括号,再出现右括号; 2、三种括号不会出现交叉现象。如“{【】{}()()}”,而不会出现类似“(【)】”的情况。 如果以人类思维方式取匹配,过程如下: 遇到左括号先暂时不管,遇到右括号再看前面出现的左括号是否匹配。(而且由于括号不会交叉,遇到右括号后,查找的一定是距离最近的一个左括号) 最前面(最先)出现的

weixin_54958866的博客 2709

栈之括号匹配问题

习题1:括号匹配问题 问题简单描述: 本来( )这两个括号是成对存在的,如果遇到出现不成对情况,并且成对的括号是以(左括号在前,)右括号在后成对存在的,连续单独出现左括号、右括号或者左括号里面夹杂不合理的左右括号都是错误信息。也就是当出现一个右括号,栈里面必须由个左括号进行匹配,否则失败。 问题解题思路: 下面来说一下具体的代码设计: 我先把之前做的栈设计成一个动态库,这样我们直接可以调用栈里面的所有方法 关于怎么设计成动态库,可以参考我之前的文章linux之动态库与静态库。 好.

Pxx520Tangtian的博客 2169
上一篇: java关键字static相关问题
下一篇: 数据结构之栈
踏雪却无痕
博客等级 码龄14年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值