LeetCode 20. Valid Parentheses

LeetCode 20. Valid Parentheses

Description

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

  • Open brackets must be closed by the same type of brackets.
  • Open brackets must be closed in the correct order.

Note that an empty string is also considered valid.

Example

在这里插入图片描述

Code

  • java
import java.util.LinkedList;
class Solution {
    public boolean isValid(String s) {
        int len = s.length();
        if(len % 2 == 1) return false;
        LinkedList<Character> list = new LinkedList<Character>();
        Character l1 = '(', l2 = '[', l3 = '{';
        Character r1 = ')', r2 = ']', r3 = '}';
        for(int i = 0; i < len; i++) {
            Character ch = s.charAt(i);
            if(ch.equals(l1) || ch.equals(l2) || ch.equals(l3)) {
                list.add(ch);
            } else {
                if(list.isEmpty()) return false;
                Character ch2 = list.removeLast();
                if(ch.equals(r1) && !ch2.equals(l1)) {
                    return false;
                } else if(ch.equals(r2) && !ch2.equals(l2)) {
                    return false;
                } else if(ch.equals(r3) && !ch2.equals(l3)) {
                    return false;
                }
            }
        }
        return list.isEmpty();
    }
}
  • Official Solution1
  • python
class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """

        # The stack to keep track of opening brackets.
        stack = []

        # Hash map for keeping track of mappings. This keeps the code very clean.
        # Also makes adding more types of parenthesis easier
        mapping = {")": "(", "}": "{", "]": "["}

        # For every bracket in the expression.
        for char in s:

            # If the character is an closing bracket
            if char in mapping:

                # Pop the topmost element from the stack, if it is non empty
                # Otherwise assign a dummy value of '#' to the top_element variable
                top_element = stack.pop() if stack else '#'

                # The mapping for the opening bracket in our hash and the top
                # element of the stack don't match, return False
                if mapping[char] != top_element:
                    return False
            else:
                # We have an opening bracket, simply push it onto the stack.
                stack.append(char)

        # In the end, if the stack is empty, then we have a valid expression.
        # The stack won't be empty for cases like ((()
        return not stack

Conclusion

  • 栈的基本操作
  • LinkedList实现了Deque,push和pop都是在队首进行的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值