题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
链接:https://leetcode-cn.com/problems/valid-parentheses
思路:
1、定义一个列表。遍历整个字符串,如果当前字符和列表顶部的元素匹配,则将列表顶部的元素pop出去,否则将其插入这个列表中
Python代码:
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
dt = {}
dt[')'] = '('
dt[']'] = '['
dt['}'] = '{'
ls = []
for item in s:
item = item.encode('utf-8')
if not ls:
ls.append(item)
continue
if item in dt and dt[item]==ls[-1]:
ls.pop()
else:
ls.append(item)
return len(ls)==0
C++代码:
class Solution {
public:
bool isValid(string s) {
map<char, char> dt;
dt[')'] = '(';
dt[']'] = '[';
dt['}'] = '{';
vector<char> vc;
for (char item:s){
if(vc.size()==0){
vc.push_back(item);
continue;
}
if(dt.find(item)!=dt.end() && dt[item]==vc.back()){
vc.pop_back();
}else{
vc.push_back(item);
}
}
return vc.size()==0;
}
};
思路2:
1、递归的遍历整个字符串,将字符串中的 '()' '[]' '{}' 全都替换为空串,看看字符串s最后是否变成了空串
Python代码:
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 len(s)==0
网友评论