给定一个只包括'(',')','{','}','[',']'的字符串 s ,
判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
思路:先把字符串里的字符依次取出,如果是左括号,则把它放到栈里面,如果是右括号则把栈顶元素弹出,如果是与右括号匹配的左括号,那么就继续取下一个字符,反之则返回false,程序结束,如果取到最后一个,发现栈里还有元素,则返回false,反之则返回true。
Java:
执行用时:3 ms
在所有 Java 提交中击败了25.46%的用户
内存消耗:36.8 MB
在所有 Java 提交中击败了20.62%的用户
class Solution {
public boolean isValid(String s) {
Stack<Character> stack=new Stack<>();
ArrayList<Character> arr=new ArrayList<>();
arr.add('(');
arr.add('[');
arr.add('{');
if(s.length()==0)
{
return true;
}
for(int i=0;i<s.length();i++)
{
if(arr.contains(s.charAt(i)))
{
stack.push(s.charAt(i));
}
else if(stack.isEmpty())
{
return false;
}
else{
if(s.charAt(i)==')')
{
if(stack.pop()!='(')
{
return false;
}
}
if(s.charAt(i)==']')
{
if(stack.pop()!='[')
{
return false;
}
}
if(s.charAt(i)=='}')
{
if(stack.pop()!='{')
{
return false;
}
}
}
}
return stack.isEmpty()==true?true:false;
}
}
Python:
执行用时:40 ms
在所有Python3提交中击败了67.06%的用户
内存消耗:14.9 MB在所有Python3提交中击败了36.66%的用户
class Solution:
def isValid(self, s: str) -> bool:
stack=[]
arr=[]
arr.append('(')
arr.append('[')
arr.append('{')
if len(s)==0:
return True
for i in s:
if i in arr:
stack.append(i)
elif len(stack)==0:
return False
else:
if i==')':
if stack.pop()!='(':
return False
if i==']':
if stack.pop()!='[':
return False
if i=='}':
if stack.pop()!='{':
return False
return True if len(stack)==0 else False