Java中栈的应用,括号匹配

 1 package edu.yuliang.Data_Structure_Basics;
 2
 3 import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
 4 /*
 5 给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串,判断字符串是否有效。
 6
 7 有效字符串需满足:
 8
 9 左括号必须用相同类型的右括号闭合。
10 左括号必须以正确的顺序闭合。
11 注意空字符串可被认为是有效字符串。
12
13
14 实现思路:
15
16 {  [  (  )  ]  }
17
18 1、依次遍历字符串,只要是{  [  (  都把它压入栈中
19
20 2、如果是  )   ]    }    则先后判断栈顶元素是否为(  ,如果是则匹配成功,栈顶中  (  出栈,不是则返回false,不匹配
21
22 3、判断栈顶元素是否为 ] ,如果是则匹配成功,栈顶中  [  出栈
23
24 4、判断栈顶元素是否为 } ,如果是则匹配成功,栈顶中  {  出栈
25
26 5、判断栈中是否还存在元素,如果不存在则表示之前已经全部匹配出栈,如果还存在则表示部分未匹配,判断依据,stack.isEmpty()。
27
28  */
29
30 import java.util.Scanner;
31 import java.util.Stack;
32
33 public class stack_match {
34     public static void main(String[] args) {
35         Stack stack =new Stack();
36         Scanner scanner  =new Scanner(System.in);
37
38
39         //char[] arr =string.toCharArray();
40         //System.out.println(string.length());
41         //System.out.println(arr.length);一样长
42         while (scanner.hasNext()){
43             String string = scanner.next();
44             boolean is_match=match(string);
45             System.out.println(is_match);
46
47         }
48
49
50
51
52     }
53     public static Boolean match(String string){
54         //申明一个stack
55
56         Stack stack =new Stack();
57         //遍历 string
58         for (int i = 0; i <string.length() ; i++) {
59             char c =string.charAt(i);
60             if(c==‘{‘||c==‘[‘||c==‘(‘){
61                 //左括号压入栈中
62                 stack.push(c);
63
64             }
65             else {
66                 //若不是就行对比
67                 if(stack.isEmpty()){
68                     return false;
69                 }
70                 char top_char= (char) stack.pop();
71                 if((c==‘)‘&&top_char==‘(‘)||(c==‘]‘&&top_char==‘[‘)||(c==‘}‘&&top_char==‘{‘)){
72                     //若是匹配了就不用在次push里面
73                 }
74                 else {
75                     stack.push(top_char);
76                 }
77             }
78         }
79         //最后为空的话就输出匹配
80         if(stack.isEmpty())
81             return true;
82
83         return false;
84     }
85 }

原文地址:https://www.cnblogs.com/AnonymousDestroyer/p/10624766.html

时间: 2024-08-24 14:48:56

Java中栈的应用,括号匹配的相关文章

C数据结构-栈和队列,括号匹配举例

1.栈和队列是两种特殊的线性表 运算操作被限定只能在表的一端或两端插入,删除元素,故也称它们为限定的线性表结构 2.栈的基本运算 1).Stackinit(&s) 构造一个空栈 2).Stackempty(s) 判断s是否为空栈,当s为空栈时,函数返回值1 否则 0 3).Push(&s,x)  在栈s 的顶部插入元素x,简称将x入 栈 4).Pop(&s,&x) 在栈s 中删除顶元并将其值保存在x单元中返回,简称将x出栈 5)Gettop(s,&x)  读s栈中的

数据结构实验之栈四:括号匹配(栈)

数据结构实验之栈四:括号匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入 输入数据有多组,处理到文件结束. 输出 如果匹配就输出"yes",不匹配输出"no" 示例输入 sin(20+10) {[}] 示例输出 yes no 提示 来源 ma6174

栈应用之括号匹配

栈的使用之括号匹配 Char s[n]是一个字符串数组.Stack是一栈,i是元素对应的下表.设一个char flag[n]数组,用来标记是否匹配,数组中数值是‘l’(左不匹配,即没有找到右括号),‘r’(右不匹配),‘o’匹配成功. 算法描述: (1)遍历该字符串数组. While(遍历){ if遇到‘(’,do stack.push(i)(i 是‘(’对应的数组下表),flag[i]=’o’(不一定就是匹配成功,以后遍历完如果stack还有元素,说明没有左匹配,要改成‘l’:如果没有,则就是

栈应用之 括号匹配问题(Python 版)

栈应用之 括号匹配问题(Python 版) 检查括号是否闭合 循序扫描被检查正文(一个字符)里的一个个字符 检查中跳过无关字符(所有非括号字符都与当前处理无关) 遇到开括号将其压入栈 遇到闭括号时弹出当时的栈顶元素与之匹配 如果匹配成功则继续,发现匹配失败时则以检查失败结束 1 def check_parens(text) : 2 # 括号匹配检查函数,text 是被检查的正文串 3 parens = "(){}[]" 4 open_parens = "({[" 5

[栈和队列]括号匹配

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #define INIT_STACK_SIZE 100 5 typedef struct 6 { 7 char * chOperator; 8 int dwtop; 9 }OPND; 10 11 void InitStack(OPND *); 12 char Pop(OPND *); 13 void Push(OPND *,char );

leetcode题解:Valid Parentheses(栈的应用-括号匹配)

题目: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]&

jzyzoj 栈——P1148:括号匹配加强版

括号匹配加强版 描述 Description 对于一个由(,),[,]括号组成的字符串,求出其中最长的括号匹配字串. 具体来说,满足如下条件的字符串成为括号匹配的字符串: (1) (),[] 是括号匹配的字符串. (2) 若A是括号匹配的串,则(A)或[A] 是括号匹配的字符串. (3) 若A和B都是括号匹配的字符串,则A+B也是括号匹配的字符串.(这里的+是字符串的加法运算). 例如:(),[],([]),()() 都是括号匹配的字符串,而][,[( ]),(]则不是. 字符串A的子串是指由A

【数据结构】栈的应用 括号匹配

括号配对问题: 假设一个表达式中包含三种类型的括号:(),{ },[],嵌套顺序任意 { [()()] } 1  2 3 4  5  6 7  8 引入"期待的急迫程度"概念,例如当接受第一个括号 { ,则它期待与第8个 } 匹配,然而当接受到第二个 [ 时,此时[最期待和第七个 ] 匹配. #ifndef _MATCH_H_ #define _MATCH_H_ #include<iostream> #include <malloc.h> #include &l

【数据结构】栈的应用——括号匹配问题

括号匹配问题: 给一个字符串,其中包含小括号.中括号.大括号,求该字符串中的括号是否匹配. 例如:()()[]{} 匹配([{()}]) 匹配[](               不匹配[(])              不匹配 利用堆栈的思路:建立一个堆栈,然后遍历字符串,如果是'(','{'.'[',则入栈,否则判断当前字符串和栈顶元素是否是一对括号:要注意的是,需要提前判断栈是否为空,为空的时候取top是违法的的,所以只要为空就入栈,然后执行下一次循环,而且,只要循环过程中出现一次栈顶元素和

Java中栈的两种实现

栈是先进后出的数据结构,主要有弹栈,入栈两种操作. 数组版 1 package stack; 2 3 /*** 4 * 栈的数组实现--java 5 * 栈是先进后出的数据结构,主要有弹栈,入栈两种操作 6 * 由于该栈是由数组实现的,数组的长度是固定的,当栈空间不足时, 7 * 必须将原数组数据复制到一个更长的数组中, 8 * 考虑到入栈时或许需要进行数组复制,平均需要复制N/2个数据项, 9 * 故入栈的时间复杂度为O(N),出栈的时间复杂度依然为O(1) 10 * @author bink