LeetCode(20) - Valid Parentheses

  题目要求是这样,给你一串只包含符号的字符串,看看这串符号合不合法。怎么算合法呢?"()()()"和"[{}]()"都算是合法,但"([)]"就不合法了。

  思路很简单,通过上面举的例子,我们可以看出来,一个右括号的出现,其合不合法,取决于最后出现的的左括号能不能对应起来,如果不能对应(如"("和"]"),则返回false。而最后出现的左括号,最优先要被判断,所以只是一个典型的后进先出的例子,这样我们就很容易想到一个后进先出的数据结构——栈。

  代码如下:

  

 1 public class Solution {
 2     public boolean isValid(String s) {
 3         Stack<Character> stack = new Stack<Character>();
 4         for (int i = 0; i < s.length(); i++) {
 5             char c = s.charAt(i);
 6             if (c == '(' || c == '[' || c == '{') {
 7                 stack.push(c);
 8             }
 9             else {
10                 //注意判断stack是否为空。
11                 if (stack.isEmpty()) return false;
12                 char c1 = getAccording(c);
13                 if (c1 != stack.pop()) return false;
14             }
15         }
16         //如果stack不为空,说明还有左括号留下来。
17         return stack.isEmpty();
18     }
19     
20     private char getAccording(char c) {
21         char c1 = ' ';
22         switch (c) {
23             case ')': c1 = '('; break;
24             case ']': c1 = '['; break;
25             case '}': c1 = '{'; break;
26         }
27         return c1;
28     }
29 }

 

转载于:https://www.cnblogs.com/kepuCS/p/5272145.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值