⬆︎
×

[LC] 0020 Valid Parentheses

Hyplus目录

Java

import java.util.*;

/**
 * <a href="https://leetcode.cn/problems/valid-parentheses/">Valid Parentheses</a>
 * 栈;字符串
 */
class Solution {
    public boolean isValid(String s) {
        int n = s.length();
        if (n % 2 == 1) {
            return false;
        }

        Map<Character, Character> pairs = new HashMap<>() {{    // <右括号, 左括号>
            put(')', '(');
            put(']', '[');
            put('}', '{');
        }};
        Deque<Character> stack = new LinkedList<>();
        for (int i = 0; i < n; i++) {
            char ch = s.charAt(i);
            if (pairs.containsKey(ch)) {
                if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {
                    return false;
                }
                stack.pop();
            } else {
                stack.push(ch);
            }
        }
        return stack.isEmpty();
    }
}

Go

func isValid(s string) bool {
    n := len(s)
    if n%2 == 1 {
        return false
    }

    mp := map[byte]byte{
        ')': '(',
        ']': '[',
        '}': '{',
    }
    stack := make([]byte, 0)
    for i := 0; i < n; i++ {
        if _, ok := mp[s[i]]; ok {
            if len(stack) == 0 || stack[len(stack)-1] != mp[s[i]] {
                return false
            }
            stack = stack[:len(stack)-1]
        } else {
            stack = append(stack, s[i])
        }
    }
    return len(stack) == 0
}

发表评论