给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。
示例 1: 输入: "()"输出: true 示例 2: 输入: "()[]{}"输出: true 示例 3: 输入: "(]"输出: false 示例 4: 输入: "([)]"输出: false 示例 5: 输入: "{[]}"输出: true
public bool IsValid(string s) { if(s == null) return true; Stack<char> stack = new Stack<char>(); char temp; for(int i = 0;i < s.Length;i++) { switch(s[i]) { case '(': stack.Push(')'); break; case '[': stack.Push(']'); break; case '{': stack.Push('}'); break; default: if(0 == stack.Count) return false; temp = stack.Pop(); if(temp != s[i]) return false; break; } } return 0 == stack.Count; }
利用栈来解决应该是没有异议的了。逻辑简单,但是需要注意细节的处理,一种是出现右边符号多的情况,栈是会为空的。一种是左边的多,右边的匹配了但是没有匹配完。