-
实例要求:
-
给定一个
只包括 '(',')','{','}','[',']'
的字符串 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;}
- 运行结果: