您的位置:首页 > 其它

Leetcode刷题(20. 有效的括号)

2019-06-21 10:47 381 查看

Leetcode刷题(20. 有效的括号)

一.题目

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

有效字符串需满足:

1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

输入: “()”
输出: true

示例 2:

输入: “()[]{}”
输出: true

示例 3:

输入: “(]”
输出: false

示例 4:

输入: “([)]”
输出: false

示例 5:

输入: “{[]}”
输出: true

二.代码(C)

int find(char *a, char b);
bool isValid(char * s)
{
int i,l,k;
int n=0;
l = strlen(s);
if (l==0)
{
return true;
}
char a1[] = {'{','[','(','\0'};
char a2[] = {'}',']',')','\0'};
int k2[l];
for (i=0;i<l;)
{
k = find(a1,s[i]);
if (k>=0)
{
if (i+1<l&&s[i+1]==a2[k])
{
i = i+2;
}
else
{
//k
 = i;
k2[n] = k;
i++;
n++;
}
}
else
{
k = find(a2,s[i]);
if (k==-1)
{
return false;
}
else if (n!=0)
{
if (s[i] != a2[k2[n-1]])
{
return false;
}
else
{
n--;
i++;
}
}
else
{
return false;
}
}
}
if (n!=0)
{
return false;
}
return true;
}
int find(char *a, char b)
{
int i;
for (i=0;a[i]!='\0';i++)
{
if (b==a[i])
{
return i;
}
}
return -1;
}

三.提交记录


四.备注

这道题采用的是堆栈的思想,即先进后出,自己设定一个数组用于保存字符,考虑到所有的不符合题目要求的情况即可。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: