给定一个括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
思路:
1.首先创建一个String类型的栈实例
2. 挨个检测s中的每个字符串,如果是左括号压栈,如果是空字符串输出false,如果是右字符串,取出栈顶的元素,与右字符串比对,如果不匹配输出false。
JAVA
class Solution {
public boolean isValid(String s) {
Stack<Character>stack=new Stack<>();
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c=='('||c=='['||c=='{')
stack.push(c);
else{
if(stack.isEmpty())
return false;
char topChar=stack.pop();
if(c==')'&&topChar!='(')
return false;
if(c==']'&&topChar!='[')
return false;
if(c=='}'&&topChar!='{')
return false;
}
}
return stack.isEmpty();
}
}
Python
经典
- 首先看字符串的长度
- 其次再看是否有效
- 在看字符串有效的时候,我们要明白在python中可以用列表表示栈,所以不要多此一举的用栈,直接用列表
- 在看字符串是否匹配的时候,我们可以用dict,把key存到列表中,每次取到的值跟弹出的列表key的值比较
Class Solution(object):
def is_valid(self,s):
results = [0]
dict = {"(":")","{":"}","[":"]"0:0}
length = len(s)
if length == 0:
return True
elif length%2 == 1:
return False
else:
for i in range(length):
if s[i] in dict:
results.append(s[i])
elif s[i] != dict[results.pop()]:
return False
if len(results) == 1:
return True
else:
return False