题目
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
提示:
1 <= s.length <= 1 0 4 10^4 104
s 仅由括号 ‘()[]{}’ 组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
- 可能如果不看这个题的类型,可能还不去想这个该用啥子算法来解决这个问题。
- 我是因为之前看过一个解说蓝桥杯题目的视频,那里面有相似的题,所以我就能够快速想出该如何去解决这个题。
代码(栈)
出栈(pop)
stack.index--;
入栈(push)
stack.index++;
stack.ch[stack.index]=s[i];
int isValid(char * s){
int l=strlen(s);
typedef struct Stack
{
char ch[l];
int index;
}st;
st stack;
stack.index=-1;
for(int i=0;i<l;i++)
{
if(stack.index==-1)
{
stack.index++;
stack.ch[stack.index]=s[i];
}
else if(s[i]==')')
{
if(stack.ch[stack.index]=='(')
{
stack.index--;
}
else
{
stack.index++;
stack.ch[stack.index]=s[i];
}
}
else if(s[i]=='}')
{
if(stack.ch[stack.index]=='{')
{
stack.index--;
}
else
{
stack.index++;
stack.ch[stack.index]=s[i];
}
}
else if(s[i]==']')
{
if(stack.ch[stack.index]=='[')
{
stack.index--;
}
else
{
stack.index++;
stack.ch[stack.index]=s[i];
}
}
else
{
stack.index++;
stack.ch[stack.index]=s[i];
}
}
if(stack.index==-1)
{
return true;
}
else
{
return false;
}
}
注释
- 因为一开始自己写的pop和push函数结果报错了,最后我就只有不写函数,直接把pop和push都写在主函数里面。