如题
很显然的运用抵消的思想来做
public boolean isValid(String s) {
char [] cs=new char[s.length()];//顺序缓存未匹配字符
int i=0;//可填入的index
for(int m=0;m<s.length();m++) {
if(s.charAt(m)=='('||s.charAt(m)=='{'||s.charAt(m)=='[') {
cs[i]=s.charAt(m);//左半括号直接写入 并将可写index+1;
i++;
}else if(s.charAt(m)==')') {//出现右半括号判断前一位是否为对应的左括号
if(i>0&&cs[i-1]=='(') {//是则可写index-1抵消掉左括号
i--; //后同
}else {
return false;
}
}else if(s.charAt(m)=='}') {
if(i>0&&cs[i-1]=='{') {
i--;
}else {
return false;
}
}else if(s.charAt(m)==']') {
if(i>0&&cs[i-1]=='[') {
i--;
}else {
return false;
}
}
}
return i==0;//完全抵消则很显然缓存应当为空
}
基本就是顺序缓存左括号,碰到右括号则判断是否与最后一位缓存对应,对应则抵消
其实就是栈的思路,空间上可以优化,很显然成立的字符串,左括号不会超过一半,用半长缓存数组就行,到所需缓存空间不足直接返回即可。