-
实例要求:
-
给定一个
只包括 '(',')','{','}','[',']'
的字符串 s
,判断字符串是否有效
; -
有效字符串需满足的条件:
-
1、左括号必须
用相同类型的右括号
闭合; -
2、左括号必须
以正确的顺序闭合
; -
3、每个右括号都有一个
对应的相同类型
的左括号; -
相关案例:
-
实例分析:
-
1、利用
strlen函数
求出该字符串长度并且定义一个顺序栈(本代码将使用一个字符型数组和整形变量替代
); -
2、
for循环
遍历字符串,当遇到’(‘,或’[‘,或’{',入栈
; -
3、当遍历到’)‘,或’]‘,或’}'且
顺序栈为NULL
,则本次有效的括号匹配false
; -
4、当遍历到’)‘,或’]‘,或’}‘且
顺序栈为非NULL
,出栈
顺序栈中的元素,并匹配’)‘,或’]‘,或’}',匹配成功返回true,失败则返回false
; -
5、当遍历好字符串后,若
顺序栈为非NULL
,则有效括号匹配失败,匹配成功返回true,失败则返回false
; -
示例代码:
bool isValid(char* s) {
int len = strlen(s);
char a[len]; //定义顺序栈
int top = 0; //定义栈顶指针
char b;
//遍历字符串
for(int i = 0; i < len; i++)
{
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
{
a[top] = s[i]; //入栈
top++;
}
else
{
if(top == 0)
{
return false;
}
top--;
b = a[top]; //出栈
if(s[i] == ')' && b != '(')
{
return false;
}
if(s[i] == ']' && b != '[')
{
return false;
}
if(s[i] == '}' && b != '{')
{
return false;
}
}
}
if(top != 0)
{
return false;
}
return true;
}
- 运行结果: