java:数据结构(二)栈的应用(括号匹配)
一.什么是括号匹配:
括号匹配就是利用计算机辨别表达式里面的括号是否书写成功
例如:
{()((a)) }这就是一个正确
(()() 这就是一个错误的
二.括号匹配的算法:
众所周知,括号分为花括号,大括号,小括号,{,[,(
但读取到左边的货号的时候将,左边的括号入栈
如果读取到},)],就让栈里面的元素出栈,如果匹配的话,就没问题。
最后如果栈中元素为空就代表括号匹配,不为空,反之,匹配失败
三.源码:(代码中栈使用的是我自己写的)
1 /** 2 * 括号匹配 3 * @param n 传入需要检测的字符串 4 * @return true 括号匹配成功 false 不符合匹配规则 5 */ 6 static boolean correct(String n) { 7 MyArraysStack<Character> e=new MyArraysStack<Character>(); 8 char[] p = n.toCharArray(); 9 for (char l : p) { 10 if (l == '(' || l == '{' || l == '[') { 11 e.push(l); 12 } else if(l==']'||l=='}'||l==')'){ 13 char d = e.getTop(); 14 if (d == '[') { 15 if (l == ']') { 16 e.pop(); 17 } else { 18 return false; 19 } 20 } else if (d == '(') { 21 if (l == ')') { 22 e.pop(); 23 } else { 24 return false; 25 } 26 } else if (d == '{') { 27 if (l == '}') { 28 e. pop(); 29 } else { 30 return false; 31 } 32 } 33 } 34 } 35 if(!e.isEmpty()){ 36 return false; 37 } 38 return true; 39 }
四.例题
题目描述
对于一个字符串,请设计一个算法,判断其是否为一个合法的括号串。
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
测试样例:
"(()())",6
返回:true
测试样例:
"()a()()",7
返回:false
测试样例:
"()(()()",7
返回:false
1 import java.util.*; 2 3 public class Parenthesis { 4 public boolean chkParenthesis(String A, int n) { 5 // write code here 6 Stack a=new Stack(); 7 char p[]=A.toCharArray(); 8 for(char d:p){ 9 if(d=='('){ 10 a.add(d); 11 }else if(d==')'){ 12 if(a.size()==0){ 13 return false; 14 }else{ 15 if((char)a.pop()=='('){ 16 17 }else{ 18 return false; 19 } 20 } 21 } 22 } 23 if(a.size()==0){ 24 return true; 25 }else{ 26 return false; 27 } 28 } 29 }
来源于牛客网:https://www.nowcoder.com/practice/d8acfa0619814b2d98f12c071aef20d4?tpId=8&&tqId=11039&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking