有效的括号

有效的括号

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例 1:

输入:s = "()"
输出:true
示例 2:

输入:s = "()[]{}"
输出:true
示例 3:

输入:s = "(]"
输出:false
示例 4:

输入:s = "([)]"
输出:false
示例 5:

输入:s = "{[]}"
输出:true

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

答案

func isValid(s string) bool {
	if len(s) <= 1 || len(s) > 10 * 10 * 10 * 10 || len(s) % 2 != 0{
		return false
	}

	// 配对的map
	m := make(map[string]string)
	m[")"] = "("
	m["]"] = "["
	m["}"] = "{"

	// 定义一个栈
	stack := []string{}

	for i := 0 ; i < len(s); i ++ {
		if len(stack) == 0 {
			// 栈空了就入栈
			stack = append(stack, string(s[i]))
		} else {
			// 取出栈顶的元素开始比较
			if stack[len(stack)-1] == m[string(s[i])]{
				// 相同,则出栈
				stack = stack[:len(stack)-1]
			} else {
				// 不同,则入栈
				stack = append(stack, string(s[i]))
			}
		}
	}
	// 判断栈中是否有元素
	if len(stack) == 0 {
		return true
	}else{
		return false
	}
}
原文地址:https://www.cnblogs.com/huiyichanmian/p/14344917.html