LeetCode 20. Valid Parentheses

本文深入探讨了括号匹配的有效性判断算法,通过使用栈数据结构实现对各种括号(圆括号、方括号、花括号)的正确闭合顺序检查。详细解释了算法流程,包括遍历字符串、压栈与弹栈操作,以及如何处理空字符串情况。

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

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

有效字符串需满足:

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

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

示例 1:

输入: "()"
输出: true

示例 2:

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

解题思路:

这里我们需要用一个栈,我们开始遍历输入字符串,如果当前字符为左半边括号时,则将其压入栈中,如果遇到右半边括号时,若此时栈为空,则直接返回false,如不为空,则取出栈顶元素,若为对应的左半边括号,则继续循环,反之返回false。

public static boolean isValid(String s) {
			Stack<Character> p=new Stack<>();
			//注意字符串是对象,空字符串也是对象,==只能判断两个引用是否相同
			if(s.equals(""))
			{
				return true;
			}
			if((s.charAt(0)==')')||(s.charAt(0)==']')||(s.charAt(0)=='}'))
			return false;
			p.push(s.charAt(0));
			int i=1;
			while(i<s.length())
			{
				if(s.charAt(i)==')')
				{
					if(p.isEmpty())
						return false;
					else if(p.peek()=='(')
						p.pop();
					else
						return false;
					
				}
				else if(s.charAt(i)==']')
				{
					if(p.isEmpty())
						return false;
					else if(p.peek()=='[')
						p.pop();
					else
						return false;
				}
				else if(s.charAt(i)=='}')
				{
					if(p.isEmpty())
						return false;
					else if(p.peek()=='{')
						p.pop();
					else
						return false;
				}
				else
					p.push(s.charAt(i));
				i++;
				
			}
			if(p.isEmpty())
			return true;
			return false;
			
		    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值