力扣:有效的括号 (C语言)

题目描述:

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

有效字符串需满足:

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

力扣:有效的括号 (C语言)_第1张图片

一、解题思路

这个题我扣了一下午,深刻反思了一下自己:就是做题少没有考虑到特殊情况或者是不会去考虑各种情况,写的我都想退学,尝试各种各样的方法,搜大家的csdn解题思路,害

力扣:有效的括号 (C语言)_第2张图片

 错误了很多遍,是真的想哭(因为实在不会想,不是故意的错这么多遍,因为是他给我的实例都能通过,特殊的过不了)不过最后解决了,好了,重点来了:

有两个思路,第一个是:比如字符串给了我一个’(‘,结合栈堆思想,我们把左括号的可以压入栈,等到右括号出来再匹配弹出。

需要注意的是:必须对称!就是说({})可以通过但是这种({)}你要给他卡出来,说到底还是堆栈的使用

第二个是:当字符串给我们一个’(‘时我们输入’)‘,到时候直接看后边的右括号是否等于你输入的就行,我只写了这个代码

二、代码

代码如下(示例):

char pairs(char a) {
    if (a == '{') return '}';
    if (a == '[') return ']';
    if (a == '(') return ')';
    return 0;
}//前边这个函数就是为了直接入栈右括号,下边好匹配
bool isValid(char * s){
     int stk[strlen(s)+1];
	int top=1;
	if(strlen(s)%2==1){//字符串不是偶数肯定不匹配
		return false;
	}
	else{
		for(int i=0;i

另外:我在写这个最大的问题就是top初值需要设置为1,不能为0或者-1,这个情况考虑的是右括号多于左括号的情况。

如果你初值设为0时,当你可以匹配的已经匹配完时右括号还多一个,左括号已经没有可以出的元素了,并且此时为了匹配右括号,会到-1也就是会报错

你可能感兴趣的:(c语言,leetcode,数据结构,算法)