看到题目首先想到的是栈的思想,先进后出。我们可以创一个字符数组,遍历s中的字符,如果是左括号就加入数组中,右括号的话判断与数组最后一个括号是否匹配,不匹配就返回false,匹配的话取走最后一个字符,长度减一,一直到s遍历结束。
class Solution {
public boolean isValid(String s) {
int len=s.length();
char[] arr=new char[len];
int k=0;
for(int i=0;i<len;i++)
{
char c=s.charAt(i);
switch(c){
case '(':
arr[k++]=c;
break;
case '[':
arr[k++]=c;
break;
case '{':
arr[k++]=c;
break;
case ')':
if(k==0||arr[k-1]!='(')
{
return false;
}
else k--;
break;
case ']':
if(k==0||arr[k-1]!='[')
{
return false;
}
else k--;
break;
case '}':
if(k==0||arr[k-1]!='{')
{
return false;
}
else k--;
break;
}
}
if(k>0) return false;
else return true;
}
}
其中必须考虑到一些特殊情况,比如遍历到的字符为右括号,但数组已经回空,那么返回false;或者当遍历完成后数组不为空,那么也返回false。然后看了题解发现还可以加个特殊值,如果s长度为奇数可以直接返回false