微信公众号:三木小小推
系列:刷题之Python
如果你觉得Md2All对你有帮助,欢迎点好看[1]
题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
解决方案
1 利用 in
By Python
class Solution:
def isValid(self, s):
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''
2 出入栈
PS: C++ 大神指针玩儿的真是666,学习了
By C++
int length=0;//定义字符串长度
while(*(s+length))length++;//获取字符串长度
char* ptr=(char*)malloc(length/2);//分配内存空间
memset(ptr,0,length/2);//初始化内存空间
int i,a=0;
for(i=0;i<length;i++)
{
if((*(s+i)=='(')||(*(s+i)=='{')||(*(s+i)=='['))
{
a++;
*(ptr+a)=*(s+i);
}
//'('与')'的ASCII值差1,'['与']','{'与'}'的ASCII值差2
else if((*(s+i)==(*(ptr+a)+1))||(*(s+i)==(*(ptr+a)+2)))
{
a--;
}
else return 0;
}
if(a)
return 0;
return 1;
}
3 官方解答撸一遍(也是出入栈)
(1) python 版
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
# 定义栈
stack = []
# hash map
mapping = {")": "(", "}": "{", "]": "["}
for char in s:
if char in mapping: # in方法在dict中指向key
top_element = stack.pop() if stack else '#'
# 出栈
if mapping[char] != top_element:
return False
else:
stack.append(char) # 入栈
return not stack
(2) java版
class Solution {
// 定义private 哈希表 HashMap mappings方法
private HashMap<Character, Character> mappings;
// 定义public类 ,用来初始化HashMap
public Solution() {
this.mappings = new HashMap<Character, Character>();
this.mappings.put(')', '(');
this.mappings.put('}', '{');
this.mappings.put(']', '[');
}
public boolean isValid(String s) {
// 建立 Stack 栈
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (this.mappings.containsKey(c)) {
// 经典C++冒号语句~~ 出栈
char topElement = stack.empty() ? '#' : stack.pop();
if (topElement != this.mappings.get(c)) {
return false;
}
} else {
// 入栈
stack.push(c);
}
}
return stack.isEmpty();
}
}
欢迎订阅
下面是三木小小推的二维码,欢迎订阅呦~~


文章转载自三木小小推,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




