bool isValid(char * s){
if(strlen(s)<2) return false;//小于两个退出
char *s1=malloc(sizeof(char)*(strlen(s)+1));//strlen(s)+1是因为加上'\0';
int k=-1,flag=1;//k数组下标 flag判断字符;a
for(int i=0;i<strlen(s);i++){
if(s[i]!='('&&s[i]!=')') flag=2;//因为()只相差1 其他括号相差2
if(s[i]=='('||s[i]=='{'||s[i]=='['){ // 把开放符号存进来('(','{','[');
k++;
s1[k]=s[i];
}
else
if(k==-1){ //s以封闭符号开头比如 "())",")()";
return false;
}
else
if(s[i]==s1[k]+flag){ //进行消消乐
k--; //对了就消了
}
else return false;//没消成功就退出;
flag=1;//重新赋一;
}
if(k!=-1) return false; //数组还有残留比如"[[]","[]]";
return true;
}
时间复杂度为O(strlen(s));
结果:
像和大家交流一下心得