题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:输入:s = "()"
输出:true
示例 1:输入:s = "()[]{}"
输出:true
示例 1:输入:s = "(]"
输出:false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
通过对题目的分析发现此题和栈紧密相关,所以尝试用栈来完成这道题
//关键步骤
for(i=0;s[i]!='\0';i++)//字符串结尾停止
{
if(s[i]=='('||s[i]=='['||s[i]=='{')//左括号入栈
{
top++;
stack[top]=s[i];
}
else if(stack[top]=='('&&s[i]==')'||stack[top]=='['&&s[i]==']'||stack[top]=='{'&&s[i]=='}')//遇见右括号立即和栈顶比对
{
top--;//相当于输出栈顶
}
else
return false;
}
if(top==0)
{
return true;//全部比对完成
}
else
{
return false;
}
要注意申请栈空间后记得释放空间以便内存的重新分配
即
free(stack);
stack==NULL;