当前位置: 首页 > news >正文

刷爆leetcode第六期 0017

编号0017

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses

我们假设字符串有这些符号组成

在这里插入图片描述

当我们遍历到左括号的时候 我们就对其进行压栈操作

c语言代码表示如下

typedef char StackType;

typedef struct Stack
{
	StackType* a;  //储存数据的大小
	int Top;       //栈顶
	int Capacity;  //数组容量大小 
}ST;

void StackInit(ST* p)
{
	assert(p);
	p->a = NULL;
	p->Top = 0;
	p->Capacity = 0;
}

StackType StackTop (ST* p)
{
	assert(p);
	return p->a[p->Top - 1];
}

void StackPush(ST* p, StackType x)
{
	assert(p);
	if (p->Top==p->Capacity)
	{
		int NewCapacity = p->Capacity == 0 ? 4: p->Capacity * 2;
		StackType* Tmp = realloc(p->a,NewCapacity*sizeof(StackType));
		if (Tmp==NULL)
		{
			perror("StackPush realloc");
		}
		else
		{
		    p->Capacity = NewCapacity;
			p->a = Tmp;
		}
	}

	p->a[p->Top] = x;
	p->Top++;
}

void StackPop(ST* p)
{
	assert(p);
	assert(p->Top > 0);

	p->Top--;
}

void StackPrint(ST* p)
{
	assert(p);
	while (p->Top>0)
	{
		printf("%d  ", p->a[p->Top - 1]);
		StackPop(p);
	}
}

int StackSize(ST* p)
{
	assert(p);
	return p->Top;
}


bool StackEmpty(ST* p)
{
	assert(p);
	return p->Top==0;
}

void StackDestroy(ST* p)
{
	assert(p);
	free(p->a);
	p->a == NULL;
	p->Capacity = 0;
	p->Top = 0;
}

ST st1;

bool isValid(char * s)
{
    StackInit(&st1);
    while(*s)
    {
        if(*s=='('||*s=='{'||*s=='[')
        {
            StackPush(&st1,*s);
            s++;
        }
        else
        {
            StackType top = StackTop(&st1);
            StackPop(&st1);
            if((*s==')'&& top!='(')
            || (*s==']'&& top!='[')
            || (*s=='}'&& top!='{')
            )
            {
                StackDestroy(&st1);
                return false;
            }
            else
            {
                s++;
            }
        }
    }
    StackDestroy(&st1);
    return true;
}

我们提交试试看

在这里插入图片描述
咦 我们可以发现 这里好像没有匹配成功过 直接遍历完了也返回true了

那么这里我们可以判断下是否为空 如果为空我们返回假就好了

我们再测试下看看

在这里插入图片描述
咦 有出错了

我们发现 这里栈上还没有数据 直接就开始出栈了 当然就报错了

那么我们再打个补丁

            // 如果遇到了后面的括号 且栈为空 直接return false
            if(StackEmpty(&st1))
            {
                return false;
            }

之后我们再试试看

在这里插入图片描述

成功通过所有测试用例

相关文章:

  • 网站空间容量/seo培训教程
  • 做群头像的网站在线制作/线上广告投放方式
  • wordpress显示未开启stmp服务/b2b网站大全免费
  • 网页设计的实验总结/网站seo分析案例
  • 安丘市住房和城乡建设局网站/南京企业网站排名优化
  • 我赢网提供的高水平网页设计师/荥阳seo
  • 一、CNN奠基作——AlexNet
  • STM32:PWM驱动舵机
  • 云物理机ironic对接ceph云盘ceph-iscsi-gateway
  • 阿里巴巴面试题- - -多线程并发篇(四十一)
  • C中常见的字符函数和字符串函数讲解
  • SpringBoot正常启动后,却无法访问
  • 不容错过,零基础入门 Python学习路线最佳实践
  • tesseract使用时遇到的问题:tesseract is not installed or it‘s not in your PATH
  • 【一篇就够】从输入网址(URL)到页面加载的全过程
  • 你可能不知道的CSS特征查询
  • JAVA练习题32:学生管理系统升级版
  • 【八组输入输出你都了解多少】