1. 题目描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.代码如下
//2018-12-16
bool isValid(char* s) {
//元素入栈,首先判断栈是否为空,若为空,则直接入栈,若不为空,则与栈顶元素比较,比较结果:若匹配,则栈顶元素退栈,若不匹配,则入栈
struct stack1
{
char *array;
int pos;
};
typedef struct stack1 stack;
stack* s1 = malloc(sizeof(stack));
int size = strlen(s);
s1->array = (char*)malloc(size);
s1->pos = 0;
for(int i =0;i < size;i++)
{
switch(*(s+i))
{
case '('://左括号直接入栈
case '[':
case '{':
s1->array[s1->pos] = *(s+i);
s1->pos ++;
break;
case ')':
if(s1->array[s1->pos-1]=='(')
{
s1->pos--;
}
else
{
return false;
}
break;
case ']':
if(s1->array[s1->pos-1]=='[')
{
s1->pos--;
}
else
{
return false;
}
break;
case '}':
if(s1->array[s1->pos-1]=='{')
{
s1->pos--;
}
else
{
return false;
}
break;
default:
return false;
}
}
if(s1->pos == 0)
{
return true;
}
return false;
}
```c