Description:
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.
Note:
{ ( [ ] ) } is also vaild~~~~
Solution:
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
for(char& c : s){
switch(c){
case '(':
case '[':
case '{':
stk.push(c);
break;
case ')':
if(stk.empty() || stk.top() != '(')
return false;
else
stk.pop();
break;
case ']':
if(stk.empty() || stk.top() != '[')
return false;
else
stk.pop();
break;
case '}':
if(stk.empty() || stk.top() != '{')
return false;
else
stk.pop();
break;
default: ;
}
}
return stk.empty();
}
};
1. 使用栈j将字符 '(' '{' '[' 压栈,当遇到字符 ')' '}' ']' 并且栈顶刚好匹配时,出栈。。。
2. C++11 新特性:序列for循环 ---
在C++中for循环可以使用类似java的简化的for循环,可以用于遍历数组,容器,string以及由begin和end函数定义的序列(即有Iterator)
for (int x: int_vec)
{
std::cout << x << endl;
}
Advance Solution:
bool isValid(string s) {
stack<char> temp;
map<char, char> m = { {']','['},{')','('},{'}','{'} };
for (int i = 0; i < s.size(); i++) {
if (s[i] == '[' || s[i] == '(' || s[i] == '{')
temp.push(s[i]);
else if (s[i] == ']' || s[i] == ')' || s[i] == '}')
{
if (temp.empty()||temp.top() != m[s[i]]) return false;
else temp.pop();
}
}
return temp.empty();
}