Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
写了一个0ms 的代码:
// 20150630.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <stack> #include <string> using namespace std; bool isValid(string s) { if (s=="")return false; stack<char> Parentheses; int size =s.size(); Parentheses.push(s[0]); for(int i = 1;i < size ;++i) { if(Parentheses.top()=='('&&s[i]==')'||Parentheses.top()=='['&&s[i]==']'||Parentheses.top()=='{'&&s[i]=='}') { Parentheses.pop(); if (Parentheses.empty()&&(i+1)!=size) { Parentheses.push(s[i+1]); i++; } } else { Parentheses.push(s[i]); } } if(Parentheses.empty()) { return true; } else { return false; } } int _tmain(int argc, _TCHAR* argv[]) { string s = "()[]{}"; isValid(s); return 0; }
另外一个看着好看点的:
class Solution { public: bool isValid(string s) { std::stack<char> openStack; for(int i = 0; i < s.length(); i++) { switch(s[i]) { case '(': case '{': case '[': openStack.push(s[i]); break; case ')': if(!openStack.empty() && openStack.top() == '(' ) openStack.pop(); else return false; break; case '}': if(!openStack.empty() && openStack.top() == '{' ) openStack.pop(); else return false; break; case ']': if(!openStack.empty() && openStack.top() == '[' ) openStack.pop(); else return false; break; default: return false; } } if(openStack.empty()) return true; else return false; } };
python代码:
class Solution: # @return a boolean def isValid(self, s): stack = [] dict = {"]":"[", "}":"{", ")":"("} for char in s: if char in dict.values(): stack.append(char) elif char in dict.keys(): if stack == [] or dict[char] != stack.pop(): return False else: return False return stack == []
</pre><pre class="python" name="code">class Solution: # @param s, a string # @return a boolean def isValid(self, s): paren_map = { '(': ')', '{': '}', '[': ']' } stack = [] for p in s: if p in paren_map: stack.append(paren_map[p]) else: if not stack or stack.pop() != p: return False return not stack
class Solution: # @param s, a string # @return a boolean def isValid(self, s): d = {'(':')', '[':']','{':'}'} sl = [] for i in s: if i in d: sl.append(i) else: if not sl or d[sl.pop()] != i: return False if sl: return False return True