LeetCode20——有效的括号(栈应用)

本文介绍了一种使用栈数据结构来验证括号字符串的有效性的算法。该算法能够判断由六种括号组成的字符串是否正确配对并闭合。通过示例演示了如何实现这一功能,并提供了完整的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true

算法思想:检验算法中可以设置一个栈,每读入一个括号,若是左括号,则直接入栈,等待相匹配的同类型右括号;若读入的是右括号,且与当前栈顶的左括号同类型,则二者匹配,将栈顶的左括号出栈,否则属于不合法的情况,另外,如果输入序列已经读完,而栈中仍然有等待匹配的左括号,或者读入了一个右括号,而栈中已无等待匹配的同类型括号,均不属于合法的情况。当输入序列和栈同时变为空时,说明所有括号完全匹配。

import java.util.*;

public class Bracket {
	 public static boolean isValid(String s) {
	        if(s==null)  return true;
	        
	        char[] ch=s.toCharArray();//将字符串对象转换成字符数组
	        Stack<Character> stack=new Stack();//创建一个Character类型的栈实例
	        for(int i=0;i<ch.length;i++){      //遍历字符数组
	            if(ch[i]=='(' || ch[i]=='[' || ch[i]=='{')//如果数组中元素为左括号,则放入栈中
	                stack.push(ch[i]);
	            else{
	                if(stack.isEmpty()) return false;//如果栈为空,则不合法
	                //如果字符数组中读到右括号且与栈顶左括号是同类型的,则将栈顶元素取出
	                if((stack.peek()=='('&& ch[i]==')') ||
	                   (stack.peek()=='{'&& ch[i]=='}') ||
	                   (stack.peek()=='['&& ch[i]==']') )
	                    stack.pop();
	                else return false;
	            }
	        }
	        
	        return stack.isEmpty();
	    }
	 public static void main(String[] args) {
		 Scanner sc=new Scanner(System.in);
		 String s=sc.nextLine();
		//String s = "{[()]}";
		System.out.println(isValid(s));
	}
	}

输出:
(
false
)(
false
{}(){}
true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值