有效的括号 (leetcode 20)

一:解题思路

利用一个辅助栈,当遇到左符号时候,入栈。当遇到右符号时候,与栈顶元素相比是否相等,按照这样的方式将字符串遍历循环下去,看看最后栈是否为空。

Time:O(n),Space:O(n)

二:完整代码示例 (C++、Java、Python)

C++

//Time:O(n),Space:O(n)
class Solution
{
public:
    bool match(char a, char b)
    {
        return ((a=='(')&&(b==')')) ||
            ((a=='[')&&(b==']')) ||
            ((a=='{')&&(b=='}'));
    }

    bool isValid(string s)
    {
        stack<char> stack;

        if (s.size() == 0) return true;

        for (int i = 0; i < s.size(); i++)
        {
            if ((s[i] == '(') || (s[i] == '[') || (s[i] == '{'))
            {
                stack.push(s[i]);
            }
            else if ((s[i] == ')') || (s[i] == ']') || (s[i] == '}'))
            {
                if ((!stack.empty()) && (match(stack.top(),s[i])))
                {
                    stack.pop();
                }
                else
                {
                    return false;
                }
            }
        }

        return stack.empty();
    }
};

Java:

class Solution
{
    public boolean match(char a,char b)
    {
        return ((a=='(')&&(b==')'))||
                ((a=='[')&&(b==']'))||
                ((a=='{')&&(b=='}'));
    }
    
    public boolean isValid(String s)
    {
        Stack<Character> stack=new Stack<>();

        if (s.length() == 0) return true;

        for (int i = 0; i < s.length(); i++)
        {
            if ((s.charAt(i) == '(') || (s.charAt(i) == '[') || (s.charAt(i) == '{'))
            {
                stack.push(s.charAt(i));
            }
            else if ((s.charAt(i) == ')') || (s.charAt(i) == ']') || (s.charAt(i) == '}'))
            {
                if ((!stack.isEmpty()) && (match(stack.peek(),s.charAt(i))))
                {
                    stack.pop();
                }
                else
                {
                    return false;
                }
            }
        }

        return stack.isEmpty();
    }
};

 

Python:

class Solution:
    def isValid(self, s: str) -> bool:
        if not s or len(s)==0: return True
        stack=[]
        dic={')':'(',']':'[','}':'{'}
        for c in s:
            if c=='(' or c=='[' or c=='{':
                stack.append(c)
            elif c==')' or c==']' or c=='}':
                if not stack or stack.pop()!=dic[c]:
                    return False
                
        return not stack

 

posted @ 2020-03-14 11:39  repinkply  阅读(222)  评论(0)    收藏  举报