简单题
题目描述
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
用数组和栈的思想写这道题
代码
bool isValid(char * s){
int len = strlen(s);
char* st = (char*)malloc(len * sizeof(char));//st当作栈
int top = 0;//栈顶
char tmp;
while (*s != '\0')
{
//左括号,入栈
if (*s == '(' || *s == '[' || *s == '{')
{
st[top++] = *s;
}
else//右括号
{
if (top == 0)//栈空,无法匹配
return false;
tmp = st[--top];//出栈
if (tmp == '(' && *s != ')' || tmp == '[' && *s != ']'
|| tmp == '{' && *s != '}')//括号不匹配
return false;
}
s++;
}
free(st);
//栈为空即全部匹配,若不为空则右括号少左括号多,不匹配
return top == 0;
}