有效的括号
题目:判断是否是有效的括号,括号有 ()[]{}三种,在字符串中必须是闭合的,比如 (){} 这是有效的,{)这种是无效的。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
解题思路:
1.利用栈先入后出特点恰好与本题括号排序特点一致,即若遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,则遍历完所有括号后 stack 仍然为空;
//非2的倍数 直接返回 if (s.Length % 2 == 1) return false; //遇到 左边括号就进栈,第一次遇到右边括号,则判断栈顶元素是不是 和自己相反(闭合),如果是闭合那就移除栈顶元素 //继续下一轮 Stack<char> chars = new Stack<char>(); for (int i = 0; i < s.Length; i++) { if (s[i] == '(' || s[i] == '[' || s[i]=='{') { chars.Push(s[i]); } else if (chars.Count == 0 || (s[i]==')'&&chars.Pop()!='(') || (s[i] == ']' && chars.Pop() != '[') || (s[i] == '}' && chars.Pop() != '{') ) { return false; } } return chars.Count == 0;
关键点:栈