题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
思路
对于这种两个一对的匹配问题,使用栈来做应该可以使得思路清晰不少,栈规则是遇到左半括号就把括号入栈,遇到右半括号就取出栈顶元素,看是否与当前右半括号匹配
源代码及注释
bool isValid(char * s) {
int len = strlen(s);
/**
* 边界情况,只有一个字符必定返回false
*/
if(len%2 == 1)return false;
/**
* 栈空间只需要原字符串长度的一半多1就可以满足了,因为如果栈满了,说明原字符串有超过一半的左半括号,
* 所以一定有些右半括号不匹配,此时可以直接返回false
*/
char a