LeetCode20 有效的括号

51 阅读1分钟

leetcode.cn/problems/va… image.png

解法一:辅助栈

遇到左括号就入栈,遇到右括号就去栈中寻找最近的左括号,看是否匹配

func isValid(s string) bool {
    stack := make([]rune, 0)
    for _, c := range s{
        if c == '(' || c == '[' || c == '{'{ // 左括号压栈
            stack = append(stack, c)
        }else{ // 右括号判断是否匹配最近一个左括号
            need := leftOf(c)
            if len(stack) > 0 && need == stack[len(stack)-1]{
                stack = stack[:len(stack)-1] // 匹配成功,出栈
            }else{
                return false // 匹配失败
            }
        }
    }
    // 是否所有的左括号都匹配完了
    return len(stack) == 0
}

func leftOf(c rune) rune {
	switch c {
	case ')':
		return '('
	case ']':
		return '['
	case '}':
		return '{'
	}
    return 0
}