Leetcode 20. 有效的括号

题目描述

在这里插入图片描述

算法描述

(辅助栈)因为最早出现的左括号对应的右括号最晚出现,与栈的存储形式及其相似,所以利用辅助栈,若是左括号则将入栈。若检测到右括号则检测栈顶。若不是对应左括号则返回false,当遍历完字符串且栈为空是返回false。
需要注意空字符串的特殊情况。

至于如何教计算机判断左括号对应的右括号,考虑到成对出现,可用哈希表进行存储。

代码实现

(C# 参考)

public class Solution {
    public bool IsValid(string s)
    {
        Dictionary<char,char> map = new Dictionary<char,char>
        {
            {']','['},
            {'}','{'},
            {')','('}
        };
        var stack = new Stack<char>();

        foreach(var item in s)
        {
            if(map.ContainsKey(item))
            {
                if(stack.Count==0)
                return false;
                else
                {
                    var element=stack.Pop();
                    if(element!=map[item])
                    {return false;}
                }
            }
            else stack.Push(item);
        }
        if(stack.Count==0) return true;
        else return false;
        

        }
    
    }

(C#)利用ASCII的有趣解法

public bool IsValid(string s) 
{
	if (s.Length % 2 == 1) return false;
	Stack<char> stack = new Stack<char>();
	foreach(char c in s) 
	{
		if (stack.Count == 0) stack.Push(c); else if (c - stack.Peek() == 1 || c - stack.Peek() == 2) stack.Pop(); else stack.Push(c);
	}
	return stack.Count == 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值