LeetCode020算法有效括号

18 阅读1分钟

题目:

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 注意空字符串可被认为是有效字符串。

示例 1:

  • 输入: "()"
  • 输出: true

示例 2:

  • 输入: "()[]{}"
  • 输出: true

示例 3:

  • 输入: "(]"
  • 输出: false

示例 4:

  • 输入: "([)]"
  • 输出: false

示例 5:

  • 输入: "{[]}"
  • 输出: true

java:


    public static boolean isValid(String s) {
        Deque<Character> deque = new LinkedList<>();
        char ch;
        for (int i = 0; i < s.length(); i++) {
            ch = s.charAt(i);
            if (ch == '(') {
                deque.push(')');
            } else if (ch == '{') {
                deque.push('}');
            } else if (ch == '[') {
                deque.push(']');
            }else if (deque.isEmpty() || deque.peek() != ch){
                return false;
            }else {
                deque.pop();
            }
        }
        return deque.isEmpty();
    }

    public static void main(String[] args) {
        String ch = "()[]{}";
        System.out.println(isValid(ch));
    }
}

Go:


func IsValid(str string) bool {
	m := make(map[rune]rune)
	m[')'] = '('
	m[']'] = '['
	m['}'] = '{'

	stack := make([]rune, 0)
	for _, s := range str {
		if s == '(' || s == '{' || s == '[' {
			stack = append(stack, s)
		} else {
			if len(stack) == 0 {
				return false
			}
			r := stack[len(stack)-1]
			if r != m[s] {
				return false
			}
			stack = stack[:len(stack)-1]
		}
	}
	return len(stack) == 0
}

看山是山.看水是水.看山不是山.看水不是水.





如果大家喜欢我的分享的话.可以关注我的微信公众号

念何架构之路