给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
思路:用栈实现
当左括号出现的时候入栈,当右括号出现的出栈,如果匹配就继续,不匹配就错误
当字符串遍历完成之后,栈内仍有字符串就错误
‘(’ 与 ‘)‘的ASCII值差1,’[’ 与 ‘]’,’{’ 与 '}'的ASCII值差2
bool isValid(char * s){
bool ans = true;
if(s)
{
char *stack = (char*)malloc(sizeof(char)*(strlen(s)+1));
int i, top = -1;
for(i = 0;s[i]!='\0';++i)
{
if(s[i] == '('||s[i] == '['||s[i] == '{'||top == -1)
stack[++top] = s[i];
else if(s[i] == stack[top] + 1||s[i] == stack[top] + 2)
--top;
else{
ans = false;
break;
}
}
if(top > -1) ans = false;
}
return ans;
}