题目
Given a string containing just the characters '(',')','[',']','{' and ‘}’,determine if the input string is valid.
An input string is valid if:
- 1.Open brackets must be closed by the same type of brackets.
- 2.Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input:"()"
Output:true
Example 2:
Input:"()[]{}"
Output:true
Example 3:
Input:"(]"
Output:false
Example 4:
Input:"([)]"
Output:false
Example 5:
Input:"{[]}"
Output:true
思路
leetcode上的解答是这样的:
先考虑简单的情况:只有一种括号
- 3.当处理完所有括号后,如果栈中还有元素,说明表达式无效。
就想在玩一个消消乐,只有当开括号和闭括号匹配的时候才能消掉这一对括号。
Tips
栈
一种线性存储表。它有以下两种特性:
- 栈中数据按照后进先出(last-in, first-out, LIFO)的方式进栈和出栈的。
- 只能从栈顶(top)操作数据。
我们可以把它想象成几个盘子堆在弹簧上的场景。
C++
bool isValid(string s) {
map<char,char> table={ {')', '('}, {']', '['}, {'}', '{'} };
if( s.size()== 0 )
return true;
stack<char> cStack;
for(int i = 0;i<s.size(); i++){
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
cStack.push(s[i]);
else if(s[i] == ')' || s[i] == ']' || s[i] == '}'){
if(cStack.empty())
return false;
char popChar = cStack.top();
if(popChar == table[s[i]]){
cStack.pop();
continue;
}
else
return false;
}
}
if(cStack.empty())
return true;
return false;
}