一、问题描述
Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.
Every close bracket has a corresponding open bracket of the same type.
Example 1:
Input: s = "()"
Output: true
Example 2:
Input: s = "()[]{}"
Output: true
Example 3:
Input: s = "(]"
Output: false
二、代码
符号匹配问题,选择用栈解决。
C++:
class Solution {
public:
bool isValid(string s) {
if(s.length() % 2 != 0) return false;
stack<char> stack_s;
for (int i=0;i<s.length();i++){
if(s[i]=='(') stack_s.push(')');//把对应的符号压入栈
else if(s[i]=='{') stack_s.push('}');
else if(s[i]=='[') stack_s.push(']');
else if(stack_s.empty()|| stack_s.top() != s[i])return false;
else stack_s.pop();//遇到对应的符号就压出
}
return stack_s.empty();//判断标志
}
};
python:利用replace()函数,代价较大。原因在于replace函数内部需要进行符号匹配。
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
while '()' in s or '{}' in s or '[]' in s:
s = s.replace('()', '')
s = s.replace('{}', '')
s = s.replace('[]', '')
return s == ''