本文转自:alaric's blog
昨天在群里有个同学问怎么校验括号是否匹配,
首先想到的是栈,遍历字符,如果遇到(,[,{就入栈,如果遇到),],}就弹出栈。很快代码如下实现了,这里要说的是java集合中有个栈这个数据结构,不需要自己再实现一个,所以比较快。代码如下:
package pipei;
import java.util.Stack;
/***
*
*【描述】:括号匹配
*【作者】:alaric
*【时间 】:Jun 4, 2012
*【文件】:pipeiMatching.java
*
*/
public class Matching {
public static boolean Match(String str){
char [] charArray = str.toCharArray();
Stack stack = new Stack();
for(char c: charArray){
if(c==’{‘||c==’['||c=='('){
stack.push(c);
}
if(c==')'||c==']‘||c==’}'){
Character cc= stack.pop();
switch(c){
case ‘)’: if(cc!=’(‘)return false;break;
case ‘]’: if(cc!=’[')return false;break;
case '}': if(cc!='{')return false;break;
}
}
}
return true;
}
/**
*【描述】:括号匹配测试
*【作者】:alaric
*【时间 】:Jun 4, 2012
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String string=”[[(()eeee)]]”;
if (Match(string)) {
System.out.println(“匹配”);
}else {
System.out.println(“不匹配”);
}
}
}
当我发出代码的时候,他说他要js写的,java看不懂,我崩溃,js实现个栈还是需要点时间的,于是拖到今天,终于有空实现下了,
代码如下:
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>Insert title here</title>
</head>
<body>
<script>
function Stock(count)
{
this.ptCount=-1;//指向最后一个数据的指针
this.count=100;//容量
this.myArray=new Array();
if(count!=undefined)
{
this.count=count;
this.myArray=new Array(this.count);
}else{
this.count=0;
}
this.Info=function(mvalue)//进栈
{
if (this.ptCount == this.count)
{
return false;
}else{
++this.ptCount;
this.myArray[this.ptCount] = mvalue;
return true;
}
return false;
}
this.Out=function()//出栈
{
if (this.ptCount == -1)
{
return false;
}
else
{
var reObject;
reObject = this.myArray[this.ptCount];
this.ptCount–;
return reObject;
}
}
this.RLCount=function()
{
return this.ptCount + 1;
}
this.Clear=function()
{
this.ptCount=-1;
}
}
function Match(str){
var charArray =new Array();
charArray= str.split(“”);
var stack = new Stock(100);
for(var i=0;i<charArray.length;i++){
var c= charArray[i];
if(c==’{‘||c==’['||c=='('){
stack.Info(c);
}
if(c==')'||c==']‘||c==’}'){
var cc= stack.Out();
switch(c){
case ‘)’: if(cc!=’(‘)return false;break;
case ‘]’: if(cc!=’[‘)return false;break;
case ‘}’: if(cc!=’{‘)return false;break;
}
}
}
if(stack.Out())return false;
return true;
}
function test(){
var str = document.getElementById(“strId”).value
var b = Match(str);
document.getElementById ( “outId” ).value=b;
}
</script>
<input type=”text” id=”strId” value=”"/>
<input type=”text” id=”outId” value=”"/>
<input type=”button” onclick=”test();” value=”submit” />
</body>
</html>
js 栈的实现,稍微有点麻烦,至少你要明白什么是栈这种数据结构,如果你了解了,这里这个代码不是很困难的。
分享到:
相关推荐
一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套, 编写程序判断表达式中的括号是否正确匹配。输入任意一个表达式,判断其中括号是否匹配,匹配, 输出OK, 不匹配,输出NO。(表达式的长度小于50)
判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。
C++编程,表达式括号匹配配对问题的实验报告
《数据结构,算法及应用》 zhangxianchao P80 13题
假设在表达式中允许有三种括号:圆括号、方括号...要求设计测试数据,如果在表达式中括号使用正确,输出结果为“此表达式中括号匹配合法”,否则输出结果为“此表达式中括号匹配不合法”,#为表达式的起始和结束标志。
假设一个算法表达式中包括圆括号、方括号两种,设计判别表达式中括号是否正确匹配的算法。括号匹配的表达式,表达式中左、右括号在类型和数目上均匹配。
【免费题库】华为OD机试 - 表达式括号匹配(Java & JS & Python & C & C++).html付费专栏内容,免费下载,多种语言解法
假设一个算术表达式中包括圆括号、方括号和花括号三种形式的括号,判别表达式中括号是否正确配对。 对于输入的表达式,输出以下四种结果之一: 1、左右括号匹配正确 2、左右括号配对次序不正确; 3、右括号多于左...
数据结构上机作业。数据结构张宪超第二章13题。 假设表达式中允许包含3种括号:圆括号,方括号,大括号。设计算法采用顺序栈判断表达式中的括号是否正确配对。
【免费题库】华为OD题库C卷 - 表达式括号匹配(Java 代码+解析).html
设计一个算法采用顺序栈判断表达式中的括号是否正确配对。
判断括号是否匹配(用单链表)
用堆栈的方法实现表达式括号匹配,和表达式的计算,后缀表达式,中缀表达式的转换。
表达式括号匹配配对判断实验报告(内附源代码)
栈判断 括号是否匹配栈判断 括号是否匹配栈判断 括号是否匹配
C语言实现表达式括号匹配算法及程序
假设表达式中允许包含3种括号:圆括号,方括号和大括号。设计一个算法采用顺序栈判断表达式中的括号是否正确配对。
假设一个算术表达式中包含圆括号、方括号两种类型的括号,试编写一个判断表达式中括号是否匹配的程序,匹配返回Match succeed!,否则返回Match false!。 例 [1+2*(3+4*(5+6))]括号匹配 (1+2)*(1+2*[(1+2)+3)...
设计算法: 检查存储在单链表中的算术表达式 s 所包含的括号—— “(” 与 “)” 、 “[” 与 “]” 、 “{” 与 “}”...由教师随机给出测试数据,程序能够反馈括号是否匹配,如果不匹配,指出第一个不匹配所在位置
C++表达式括号匹配题解样例