给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
是对栈的模拟
用栈进行匹配
typedef struct node {
int val;
char s;
struct node*next;
}ne;
void dele(ne*node)// 创建栈
{
ne*p;
while(node->next)
{
p=node;
node=node->next;
}
p->next=NULL;
free(node);
}
void dle(ne*node,char a)//出栈
{
ne*p=(ne*)malloc(sizeof(ne));
p->s=a;
while(node->next)//移动到最后
{
node=node->next;
}
p->next=NULL;
node->next=p;
}
bool isValid(char* s) {
ne*node=(ne*)malloc(sizeof(ne));
node->next=NULL;
node->val=0;
ne*node1=(ne*)malloc(sizeof(ne));
node1->next=NULL;
node1->val=0;
ne*node2=(ne*)malloc(sizeof(ne));
node2->next=NULL;
node2->val=0;
int i=0;
while(s[i]!='\0')
{
//进栈
if(s[i]=='(')
{
dle(node,s[i]);
node->val++;
}
else
if(s[i]=='[')
{
dle(node,s[i]);
node->val++;
}
else
if(s[i]=='{')
{
dle(node,s[i]);
node->val++;
}
else
{ //出栈匹配
ne*p1=node;
while(p1->next)
{
p1=p1->next;
}
if((s[i]==']'&&p1->s=='[')||(s[i]=='}'&&p1->s=='{')||(s[i]==')'&&p1->s=='('))
{
dele(node);
node->val--;
}
else
return 0;
}
i++;
}
if(node->val==0)
return 1;
else
return 0;
}
作者:目
链接:https://leetcode.cn/problems/valid-parentheses/solutions/2665704/zhan-de-mo-ni-by-ruan-jian-gong-cheng-ji-bqcd/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。