堆栈

方法1:Stack

public boolean isValid(String s) {
    Map<Character, Character> dict = new HashMap<>();
    dict.put(']', '[');
    dict.put(')', '(');
    dict.put('}', '{');
    Stack<Character> stk = new Stack<>();
    for (char c : s.toCharArray()) {
        if (c == '[' || c == '(' || c == '{') stk.push(c);
        else if (!stk.isEmpty() && dict.containsKey(c) && dict.get(c) == stk.peek()) stk.pop();
        else return false;
    }
    return stk.isEmpty();
}

方法2:Deque

  • 等价写法

方法1:栈

Follow Up:返回最长长度的下标索引

方法2:DP

方法3:贪心

方法1:栈

方法1:栈

方法2:DP

方法1:栈

方法2:数组

解释

  • 官解,很棒的思路

事实上,只有 () 会对字符串 S 贡献实质的分数,其它的括号只会将分数乘二或者将分数累加。因此,我们可以找到每一个 () 对应的深度 x,那么答案就是 2^x 的累加和。

Last updated