20. Valid Parentheses
Difficulty: Easy
Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
给定仅包含字符’(‘、’)’、’{‘、’}’、’[‘、’]’的字符串,确定输入字符串是否有效(配对)。
如:”()”、”()[]{}”、”[(){}]”、”[({(())}[()])]”返回true,
而”(]”、”([)]”返回false。
bool isValid(char* s) {
int i,k;
int slen=strlen(s);
char* temps;
if(slen%2)
return false;
temps=(char*)malloc(slen*sizeof(char));
k=-1;
for(i=0;i<slen;i++)
{
if(s[i]=='(' ||s[i]=='[' ||s[i]=='{') //若为左括号,存到temps中
{
k++;
temps[k]=s[i];
}
else if(k>=0)
{
if(s[i]-temps[k]==1 || s[i]-temps[k]==2) //若为右括号,判断是否成对
k--;
else
{
free(temps);
return false;
}
}
else //先出现右括号
{
free(temps);
return false;
}
}
free(temps);
if(k>-1) //还有未消掉的左括号
return false;
return true;
}