题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:将字符串中的左括号存在一个数组中,当遇到第一个右括号时判断左括号数组是否为空若不为空则与数组中最后一个左括号对比是否匹配,匹配则从数组中删去即将其置为’\0’,否则退出循环,此时数组不为空;若遇到第一个右括号时数组为空则将标志位置为1,意味着失配(无效字符串)。最后退出循环后若左括号数组第一个就是空(’\0’)并且flag=0意味着字符串有效;并且空字符串也有效。
代码:
bool isValid(char * s){
char *r;
int le[10000]={'\0'},ri[10000]={'\0'};
int i=0,j=0,k,n,flag=0;
r=s;
while(*r!='\0'){
if(*r=='('||*r=='['||*r=='{'){
ri[i]= *r;
r++;
i++;
// printf("%d",i);
}else if(*r==')'||*r==']'||*r=='}'){
if(ri[0]!='\0')
if((char)(ri[i-1]+1)==*r||(char)(ri[i-1]+2)==*r||(char)(ri[i-1]+2==*r)){
ri[i-1]='\0';
i--;
r++;
}else{
break;
}
else{
flag=1;
break;
}
}
}
if(ri[0]=='\0'&&flag==0||*s=='\0')
return true;
else
return false;
}