算法题:括号匹配(小中大括号序列)

括号序列由( )[ ]{ }组成,不合法的括号序列由( { ) },[ } { ],等等。编程实现一个函数,检查一个括号序列是否是合法的括号序列。

解法:

思路和“后缀表达式的求解”相似。我们借助栈,每读一个括号,如果是左括号,那么入栈,然后继续读下一个括号;如果是右括号,那么就要看看这个右括号和栈顶的括号是否匹配;如果匹配,那么弹出栈顶的括号,继续读下一个括号。当栈变空时,说明此括号序列是合法的。
 

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
public class Test05 {
  
    public static boolean isValid(String exp) {
        String left = "([{";
        String right = ")]}";
        Stack<Character> s = new Stack<Character>();
        for (int i = 0, len = exp.length(); i < len; i++) {
            char ch = exp.charAt(i);
            if (left.indexOf(ch) != -1) {
                s.push(ch);
            }
            else if (right.indexOf(ch) != -1) {
                if (!s.isEmpty()) {
                    char temp = s.pop();
                    if (ch != right.charAt(left.indexOf(temp))) {
                        return false;
                    }
                }
                else {
                    return false;
                }
            }
        }
        return s.isEmpty();
    }
  
    public static void main(String[] args) {
        System.out.println(isValid("([()]{})"));
        System.out.println(isValid("((){}"));
        System.out.println(isValid("[{)()]"));
    }
  
}
  

  

posted @   程序员面试  阅读(1899)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示