java栈匹配括号_栈结构的java实现&括号匹配问题

本文介绍了使用Java实现栈结构来处理括号匹配问题,详细讲解了栈的构造器方法,包括入栈和出栈操作。通过示例代码展示了如何检查字符串中的小括号是否成对出现,提供了`isMatch`方法来判断括号匹配情况。
摘要由CSDN通过智能技术生成

栈的结构,构造器方法定义:

//记录首结点

private Node head;

//栈中元素的个数

private int N;

private class Node{

public T item;//保存结点信息

public Node next;//保存下一个结点

public Node(T item, Node next) {

this.item = item;

this.next = next;

}

}

public Stack() {

this.head = new Node(null,null);

this.N=0;

}

入栈与出栈:

//把t元素压入栈

public void push(T t){

//找到首结点指向的第一个结点

Node oldFirst = head.next;

//创建新结点

Node newNode = new Node(t, null);

//让首结点指向新结点

head.next = newNode;

//让新结点指向原来的第一个结点

newNode.next=oldFirst;

//元素个数+1;

N++;

}

//弹出栈顶元素

public T pop(){

//找到首结点指向的第一个结点

Node oldFirst = head.next;

if (oldFirst==null){

return null;

}

//让首结点指向原来第一个结点的下一个结点

head.next=oldFirst.next;

//元素个数-1;

N--;

return oldFirst.item;

}

括号匹配问题

问题描述****:

给定一个字符串,里边可能包含"()"小括号和其他字符,请编写程序检查该字符串的中的小括号是否成对出现。

例如:

"(上海)(长安)":正确匹配

"上海((长安))":正确匹配

"上海(长安(北京)(深圳)南京)":正确匹配

"上海(长安))":错误匹配

"((上海)长安":错误匹配

public class BracketsMatchTest {

public static void main(String[] args) {

String str = "上海(长安)())";

boolean match = isMatch(str);

System.out.println(str+"中的括号是否匹配:"+match);

}

/**

* 判断str中的括号是否匹配

* @param str 括号组成的字符串

* @return 如果匹配,返回true,如果不匹配,返回false

*/

public static boolean isMatch(String str){

//1.创建栈对象,用来存储左括号

Stack chars = new Stack<>();

//2.从左往右遍历字符串

for (int i = 0; i < str.length(); i++) {

String currChar = str.charAt(i)+ "";

//3.判断当前字符是否为左括号,如果是,则把字符放入到栈中

if (currChar.equals("(")){

chars.push(currChar);

}else if(currChar.equals(")")){

//4.继续判断当前字符是否是有括号,如果是,则从栈中弹出一个左括号,并判断弹出的结果是否为null,如果为null证明没有匹配的左括号,如果不为null,则证明有匹配的左括号

String pop = chars.pop();

if (pop==null){

return false;

}

}

}

//5.判断栈中还有没有剩余的左括号,如果有,则证明括号不匹配

if (chars.size()==0){

return true;

}else{

return false;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值