20 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
思路:这个题很显然是栈的简单应用,这道题运用顺序栈就能很块的写出来,先从原数组中拿出一个如果是左括号,就纳入栈中,如果是右括号就先和栈顶比较如果匹配就像消消乐消去栈顶的左括号,已知’(‘与’)‘的ASCII值差1,’[‘与’]’,’{‘与’}'的ASCII值差2,最后如果栈中的元素都消没了,就返回true,否则false。
bool isValid(char * s)
{
int i,n,top=-1;
n=strlen(s);
char *stack=(char *)malloc(sizeof(char)*n);
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
{
return false;
}
}
if(top>-1) return false;
else return true;
}