问题描述
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
问题分析
经过简单的分析我们就能明白,一个有效的括号字符串是要所有括号都能消去的,而一个括号要能消去的话,左括号的下一个字符就必须是右括号,所以此问题只需要判断括号是否能够完全消去即可。
代码
bool isValid(char *s){
int num = 0;
int flag = 0;
int j = 0;
while(s[0]!=0){
for(int i = 0; s[i+1] != 0; i++){
switch(s[i]){
case '(':
if(s[i+1] == ')'){
for(j = i+2; s[j] != 0; j++){
s[j-2] = s[j];
}
s[j-2] = s[j];
flag = 1;
}
break;
case '[':
if(s[i+1] == ']'){
for(j = i+2; s[j] != 0; j++){
s[j-2] = s[j];
}
s[j-2] = s[j];
flag = 1;
}
break;
case '{':
if(s[i+1] == '}'){
for(j = i+2; s[j] != 0; j++){
s[j-2] = s[j];
}
s[j-2] = s[j];
flag = 1;
}
break;
}
if(flag){
flag = 0;
break;
}
}
num++;
if(num>10001){
break;
}
}
if(s[0]==0){
return true;
}
return false;
}