一、题目叙述
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
二、解题思路
使用栈数据结构进行解题:
- 对字符串进行遍历,遇到左括号进栈时,将元素进栈,遇到右括号时,看是否与前面的左括号匹配。
- 符合要求的字符串,栈在操作前后都应为空栈。
三、具体实现
char pairs(char a){
if(a==')') return '(';
if(a==']') return'[';
if(a=='}') return '{';
return 0;//用来配对括号,右括号时返回相应的左括号,左括号时,返回0
}
bool isValid(char * s){
int len=strlen(s);//计算字符串长度
char arr[len+1];//创建空栈
int top=0;//栈顶
char ch;
for(int i=0;i<len;i++){
ch=pairs(s[i]);
if(ch){//右括号时
if(top==0 || arr[top-1]!=ch)//1,只有右括号,没有左括号 //2,右括号与前面的左括号不匹配
return false;
//否则,匹配成功,消解括号
top--;
}
else{//左括号时,进行入栈操作
arr[top++]=s[i];
}
}
return top==0;//判断循环结束后,是否为空栈。
}
感谢观看!!!!