public class Solution {
    Stack<char> S = new Stack<char>();

        public bool IsValid(string s)
        {
            foreach (var c in s)
            {
                if (c == '(' || c == '[' || c == '{')
                {
                    S.Push(c);
                }
                else if(c == ')')                
                {
                    if (S.Count > 0)
                    {
                        var k = S.Peek();
                        if (k == '(')
                        {
                            S.Pop();
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else
                    {
                        return false;
                    }
                }
                else if (c == ']')
                {
                    if (S.Count > 0)
                    {
                        var k = S.Peek();
                        if (k == '[')
                        {
                            S.Pop();
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else
                    {
                        return false;
                    }
                }
                else if (c == '}')
                {
                    if (S.Count > 0)
                    {
                        var k = S.Peek();
                        if (k == '{')
                        {
                            S.Pop();
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            if (S.Count > 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
}

https://leetcode.com/problems/valid-parentheses/#/description

补充一个python的实现:

 1 class Solution:
 2     def isValid(self, s: str) -> bool:
 3         n = len(s)#获取字符串的长度
 4         if n == 0:#如果长度为0,则表示空串,本题认为是合法的串
 5             return True
 6         if n % 2 == 1:#如果是奇数个括号,则必然不合法
 7             return False
 8         stack = []#定义一个列表用来模拟栈
 9         for c in s:#循环字符串中的每个字符
10             if c == '(' or c == '{' or c == '[':#如果是左括号
11                 stack.append(c)#直接入栈
12             elif c == ')':#如果是右括号
13                 if len(stack) > 0:#栈不为空
14                     if stack[-1] == '(':#栈顶元素是对应的左括号
15                         stack.pop(-1)#目前合法,则将栈顶出栈
16                     else:
17                         stack.append(')')#栈顶元素无法匹配,则当前右括号入栈
18                 else:#栈为空,则无法匹配
19                     return False
20             elif c == '}':
21                 if len(stack) > 0:
22                     if stack[-1] == '{':
23                         stack.pop(-1)
24                     else:
25                         stack.append('}')
26                 else:
27                     return False
28             elif c == ']':
29                 if len(stack) > 0:
30                     if stack[-1] == '[':
31                         stack.pop(-1)
32                     else:
33                         stack.append(']')
34                 else:
35                     return False
36         if len(stack) == 0:#如果栈可以左右都匹配(成对消除)
37             return True#则是合法串
38         else:
39             return False

 

posted on 2017-04-24 20:42  Sempron2800+  阅读(165)  评论(0编辑  收藏  举报