UVA - 673 (括号的匹配)
有两种方法:
第一种:数组
思想:观察可匹配成功的字符串可知:
找到第一个i为出括号(')',']')那么与它相匹配的进括号一定是在它左边i-1(最近的)
如果不是第一个出括号,与它相匹配的进括号一定是在它左边距离t对已匹配的括号(假设两者相隔t对已匹配的括号)可把已匹配的括号值设为0,那么只需找到第一个不为0的数是否与出括号匹配,如果不匹配说明该字符串不匹配)
([]), (([()]))) ,([()[]()])()
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<stdio.h> 5 #include<string.h> 6 #include<stack> 7 using namespace std; 8 int main() 9 { 10 int n; 11 // freopen("D:\\in.txt","r",stdin); 12 // freopen("D:\\out.txt","w",stdout); 13 cin>>n; 14 getchar(); 15 while(n--){ 16 int s[130]; 17 char mys[130]; 18 cin.getline(mys,sizeof(mys)); 19 int flagh=0; 20 int x1=0,x2=0,x3=0,x4=0; 21 for(int i=0;i<strlen(mys);i++) 22 { 23 if(mys[i]=='(') 24 s[i]=1,x1++; 25 if(mys[i]==')') 26 s[i]=-1,x2++; 27 if(mys[i]=='[') 28 s[i]=2,x3++; 29 if(mys[i]==']') 30 s[i]=-2,x4++; 31 } 32 if(x1!=x2||x3!=x4)//说明括号数量不匹配 33 flagh=1; 34 // for(int i=0;i<strlen(mys);i++) 35 // cout<<s[i]<<" "; 36 for(int i=0;i<strlen(mys);i++) 37 { 38 if(s[i]<0)//说明它是')'或者是‘]' 39 { 40 int flag=1,j; 41 for(j=i-1;j>=0;j--)//找到第一个不为0的数(另一个匹配的括号) 42 { 43 if(s[j]==0) 44 continue; 45 else{ 46 if(s[i]+s[j]!=0)//说明不匹配 47 { 48 flag=0; 49 } 50 break; 51 } 52 } 53 if(flag==0)//说明不符合 54 { 55 flagh=1; 56 break; 57 } 58 else//说明符合 把匹配的括号设为0 59 { 60 s[j]=0; 61 s[i]=0; 62 } 63 } 64 } 65 for(int i=0;i<strlen(mys);i++)//检查是否存在没匹配的字符(即不为0的数) 66 { 67 if(s[i]!=0) 68 { 69 flagh=1; 70 break; 71 } 72 } 73 // cout<<endl; 74 // for(int i=0;i<strlen(mys);i++) 75 // cout<<s[i]<<" "; 76 if(flagh==1) 77 cout<<"No"<<endl; 78 else 79 cout<<"Yes"<<endl; 80 } 81 // 82 //fclose(stdin); 83 //fclose(stdout); 84 }
第二种:栈
1)栈的思想
#include<stdio.h> #include<string.h> int main() {int i,j,k,T;int flag;int s[135],st,top;char c[135];scanf("%d",&T);getchar();while(T--){fgets(c,sizeof(c),stdin);flag=0;j=0;for(i=0; c[i]!='\n'; i++){if(c[i]=='(')s[j++]=0;else if(c[i]=='[')s[j++]=1;else if(c[i]==')'){if(j!=0 && s[j-1]==0)j--;else{flag=1;break;}}else if(c[i]==']'){if(j!=0 && s[j-1]==1)j--;else{flag=1;break;}} // else // { // flag=1; // break; // } }if(flag==1|| j!=0)printf("No\n");elseprintf("Yes\n");}return 0; }
转载于:https://www.cnblogs.com/Aiahtwo/p/11067060.html
UVA - 673 (括号的匹配)相关推荐
- 第2关:利用栈判断字符串括号是否匹配
#ifndef stack__h #define stack__h#include <stdio.h> #include <stdlib.h>typedef char T; / ...
- python 判断括号是否匹配_使用Python实现一个栈判断括号是否平衡
栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top). 举个例子,栈就想一摞洗干净的盘子,你每次取一个新盘子,都是放在这一摞盘子的最上头,当你往里 ...
- LeetCode Valid Parentheses(判断括号是否匹配)
题意:给出(,[,{,),],}括号组成的字符串, 判断括号是否匹配 思路:用栈结构判断 1.如果是(,[,{,将其入栈 2.如果遇到),],},看栈是否为空.栈顶元素是否对应为(,[,{ 3.将字符 ...
- 数据结构算法——判断表达式中的括号是否匹配
元旦三天假,闲着没事干,就想着复习一下学数据结构时的那些算法吧.本来是想用C语言来写的,无奈啊,三四年没用C了,基本上忘光光,还是用C#来写吧,而且.Net基类库中已经有了栈.队列等的实现,直接拿来用 ...
- 判断字符串中的括号是否匹配——c和c++实现
判断字符串中的括号是否匹配 递归实现: 先检搜一对匹配的括号,再对里面的内容进行匹配,匹配完后再继续往下匹配-- 代码如下: #include <stdio.h> #include & ...
- java小编程----括号是否匹配
错误示例::: 当 String s = "...(...[....]....{...}...)...(.[..).."; 应输出3 package com.henu.ji ...
- python中用函数设计栈的括号匹配问题_数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题...
算法 数据结构 数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等.如 ...
- 如何判定括号是否匹配
如何判定括号是否匹配 package p1;import java.util.Stack;public class Demo07 {public static boolean isGoodBracke ...
- 数据结构上机实践第五周项目3 - 括号的匹配
括号的匹配 本次实践将用到顺序栈的算法库,点击此处参考. 本次实践要求: 假设表达式中允许三种括号:圆括号.方括号和大括号.编写一个算法,判断表达式中的各种左括号是否与右括号匹配. 例如,输入2+( ...
- 数据结构括号是否匹配
2022.10.13数据结构括号是否匹配,这题才开始5组/7组最后10组测试成功. ddd最近我感觉我对前标开窍了一点,课本真是个好东西.欢迎点赞.评论.收藏转发. 数据结构括号是否匹配 任务描述 相 ...
最新文章
- 难点电路详解之负反馈放大器电路(3)
- GlobalSign 荣登网络信任联盟 2013 年网络信任荣誉榜
- 解决libuuid.so.1 no version information available问题
- 31.openssl编程——SSL实现
- HttpEntity.EMPTY属性代码示例
- 计算机视觉对扫描文件分类 OCR
- jquery eaayui 学习(四)datagrid
- stm32 web get 参数_纯进口mpv销量排行榜 迈巴赫vs680商务车参数
- vue element container 子路由
- Seata多微服务互相调用_全局分布式事物使用案例_Storage-Module 仓储微服务说明---微服务升级_SpringCloud Alibaba工作笔记0063
- unix环境高级编程基础知识之第一篇
- 鸿蒙移植stm32,韦东山老师要移植鸿蒙的那个STM32MP157具体是什么?
- 人民币转换美金的c语言代码大全,人民币和美元大写格式在线工具,美元美金数字金额转换大写,外币大写金额...
- vscode 折叠所有区域代码快捷键
- 美团网站底部超链接部分设计实现
- 打开excel提示损坏的映像的解决办法
- mpvue开发微信小程序踩坑笔记
- 基金小白理财收益超过1万+的回顾
- 视频H265格式压缩,软件压缩方法,硬件的没有条件,没法测试。
- Python绘图Turtle库详解情人节玫瑰花