算法-栈

20230212,窗外一直下雨,那就静下心来好好学习(保证做事要有思路),做点好吃的。

一 学习算法的步骤:

1.模拟:模拟题目的运行
2.规律:尝试总结出题目的一般规律和特点
3.匹配:找到符合这些特点的数据结构和算法
4.边界:考虑特殊情况
5.画图。

二 案例: 判断一个括号字符串是否有效 

一个括号字符串是只由 '(' 和 ')' 组成的 非空 字符串。如果一个字符串满足下面 任意 一个条件,那么它就是有效的:

字符串为 ().
字符串()()(())

 请你返回 true ,否则返回 false 。

2.1 模拟

 

 

 2.2 规律

  1)每个左括号(或者右括号)都要完成匹配,才是合法的

  2)配对可通过消除法来消掉合法的括号,如果最后没有任何字符,就是合法字符

  3)奇数长度字符串总是非法的

2.3 匹配

  可以用栈来解决问题

2.4 边界

  1)字符串为空

  2)字符串只有一个或者奇数个

  3)字符串是“((()))”嵌套很多层的是否可以处理

2.5 画图

  

 

 

三 编码验证 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
static bool IsValid(string s) {
    // 当字符串为空,可以快速返回true
    if (string.IsNullOrWhiteSpace(s))
    {
        return true;
    }
    // 当字符串长度为奇数,可以快速返回false
    if (s.Length % 2 == 1)
    {
        return false;
    }
 
    Stack<char> stack = new Stack<char>();
    foreach (char c in s)
    {
        // 如果是 ’(‘,进栈
        if (c == '(')
        {
            stack.Push(c);
        }
        // 如果是 ’)‘,出栈
        else if (c == ')') {
            // 栈为空,出栈失败,返回false
            if (!stack.Any())
            {
                return false;
            }
            else
            {
                stack.Pop();
            }
        }
    }
    // 最后栈为空,则返回true,否则返回false
    if (!stack.Any())
    {
        return true;
    }
    else {
        return false;
    }
}

  

 

posted @   vba是最好的语言  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示