美文网首页
leetcode 探索-初级算法 其他 有效的括号 C#

leetcode 探索-初级算法 其他 有效的括号 C#

作者: Garvey叫兽 | 来源:发表于2018-06-19 11:08 被阅读0次

之前写了两篇 感觉太简单的没什么意思 就一直搁下懒得写了 今天做题的时候碰到了个有意思的 就记录一下吧

 有效的括号

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

有效字符串需满足:

1.左括号必须用相同类型的右括号闭合。

2.左括号必须以正确的顺序闭合。

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

示例 1:

输入:"()"输出:true

示例 2:

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

示例 3:

输入:"(]"输出:false

示例 4:

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

示例 5:

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

初看 感觉需要遍历 和一大堆if判断 然后还想到可以用ascii码的值来判断 后来自己写的时候 发现只能满足 (){}()[] 这种依次排列 以及({[]}) 这样规律的嵌套 ({}([])) 这种多级的嵌套无法搞定 以下是我失败的截图 

失败尝试

其实还是蛮简洁有意思的,但是我懒得继续想了 感觉挺蠢的 而且本能地想到应该是需要用到栈 因为最早看<<算法>>那本书的时候,提及到了对于栈的一些使用 百度了一下 果然如此 并且自己实现了一种 好像还不错的方法 如下

public class Solution { public bool IsValid(string s) { if (s == null) return true; if (s.Length % 2 == 1) return false; Stacksc=new Stack();

            for(int i = 0; i < s.Length; i++)

            {

                switch (s[i])

                {

                    case '(': sc.Push(s[i]); break;

                    case '{': sc.Push(s[i]); break;

                    case '[': sc.Push(s[i]); break;

                    case ')':if (sc.Count == 0 || sc.Peek() != '(') return false; else sc.Pop(); break;

                    case '}':if (sc.Count == 0 || sc.Peek() != '{') return false; else sc.Pop(); break;

                    case ']':if (sc.Count == 0 || sc.Peek() != '[') return false; else sc.Pop(); break;

                }

            }

            return sc.Count == 0;

        }

    }

思路就是遇到左括号就压进去 遇到右括号就去和栈顶对比 其他的嘛 自己写写思路也就理清啦 不赘述了

然后在我提交了之后 又看到了一种NB的算法

public class Solution{ public bool IsValid(string s) { Stackstack = new Stack();

        foreach (char item in s.ToCharArray())

        {

            if (item == '(')

                stack.Push(')');

            else if (item == '{')

                stack.Push('}');

            else if (item == '[')

                stack.Push(']');

            else if (stack.Count == 0 || stack.Pop() != item)

                return false;

        }

        return stack.Count == 0;

    }

}

牛比在哪? emmm自己读读吧 虽然我感觉思路区别不是很大 但是这个用时是之前那个的一半还要少哦

相关文章

  • leetcode 探索-初级算法 其他 有效的括号 C#

    之前写了两篇 感觉太简单的没什么意思 就一直搁下懒得写了 今天做题的时候碰到了个有意思的 就记录一下吧 有效的括号...

  • leetcode探索初级算法之其他

    1. 位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明...

  • leetcode算法-有效的括号

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

  • 2020-09-20

    数据结构与算法系列(一)栈:如何实现有效括号的判断? 有效括号,我想很多人对LeetCode上的这道题很熟悉吧? ...

  • PHP之高频考点算法合辑

    有效括号 LC: Valid Parentheses - LeetCode[https://leetcode.co...

  • 有效括号 Click here for leetcode details[https://leetcode-cn....

  • LeetCode刷题-有效的括号

    前言说明 算法学习,日常刷题记录。 题目连接 有效的括号[https://leetcode-cn.com/prob...

  • 一文秒杀三道括号相关的题目

    读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 20.有效的括号[https:/...

  • 算法:leetcode 32 最长有效括号

    题意 输入类似“((())(",请找出最长的有效括号。 分析 对于任意的一个有效括号来说,它肯定是一个”(“一个左...

  • leetcode算法-20-有效的括号

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

网友评论

      本文标题:leetcode 探索-初级算法 其他 有效的括号 C#

      本文链接:https://www.haomeiwen.com/subject/tycaeftx.html