给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
利用栈先进后出的特性实现。若N为字符串s的长度,则算法的时间复杂度为O(n),空间复杂度为O(n)。
c++实现
#include<stack>
#include<string.h>
class Solution {
public:
bool isValid(string s) {
if(s.size()==0)
{return true;}
stack<char> sta;
for(int i=0;i<s.size();i++)
{
char ch=s[i];
if(ch=='('||ch=='{'||ch=='[')
{sta.push(ch);}
else
{
if(sta.empty())
{return false;}
else
{
char temp=sta.top();
sta.pop();
if(ch==')')
{
if(temp!='(')
{return false;}
}
else if(ch=='}')
{
if(temp!='{')
{return false;}
}
else if(ch==']')
{
if(temp!='[')
{return false;}
}
}
}
}
return sta.empty()?true:false;
}
};
java实现
import java.util.Stack;
class Solution {
public boolean isValid(String s) {
if(s.length()==0)
{return true;}
Stack<Character> stack=new Stack<>();
for(char ch:s.toCharArray())
{
if(ch=='('||ch=='{'||ch=='[')
{stack.push(ch);}
else
{
if(stack.isEmpty())
{return false;}
else
{
char temp=stack.pop();
if(ch==')')
{
if(temp!='(')
{return false;}
}
else if(ch=='}')
{
if(temp!='{')
{return false;}
}
else if(ch==']')
{
if(temp!='[')
{return false;}
}
}
}
}
return stack.isEmpty()?true:false;
}
}
python实现
class Solution:
def isValid(self, s: str) -> bool:
if len(s)==0:
return True
stack = []
for c in s:
if c=='(' or c=='{' or c=='[':
stack.append(c)
else:
if len(stack)==0:
return False
else:
temp=stack.pop()
if c==')':
if temp!='(':
return False
elif c=='}':
if temp!='{':
return False
if c==']':
if temp!='[':
return False
return True if len(stack)==0 else False