给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
代码:(C语言没有堆栈函数调用,所以需要自己实现)
bool isValid(char* s) {
int n=0;
int length = strlen(s);
char stack[10000];
for(int i=0; i<length; i++) //括号匹配
{
if( *(s+i)=='(' || *(s+i)=='[' || *(s+i)=='{')
{
n++; //入栈
stack[n] = *(s+i);
}
else if( (*(s+i)==')' && stack[n]=='(') ||
(*(s+i)==']' && stack[n]=='[') ||
(*(s+i)=='}' && stack[n]=='{') )
n--; //出栈
else
{
return false;
}
}
if(n == 0)
return true;
return false;
}
注意:代码中的 char stack[ ] 可以换一种方式实现,以节省空间的分配
char* ptr=(char*)malloc(length/2);//分配内存空间
memset(ptr,0,length/2);//初始化内存空间
//stack[n] 改为 *(ptr+n)