方法一:C语言
bool isValid(char* s) {
char a[100000] = { 0 };
int count = 0;
while(*s)
{
switch(*s)
{
case '{':
case '[':
case '(':
a[count] = *s;
count++;
break;
case '}':
case ']':
case ')':
//遇到第一个括号是右括号
if(count == 0)
{
return 0;
}
if((a[count-1] == '{' && *s == '}') ||
(a[count-1] == '[' && *s == ']') ||
(a[count-1] == '(' && *s == ')'))
{
count--;
}
//括号不匹配
else
{
return 0;
}
}
s++;
}
//左括号剩余未匹配完
if(count)
{
return 0;
}
return 1;
}
第二种:c++
class Solution {
public:
bool isValid(string s) {
stack<char> a;
int size = s.size();
for(int i=0; i<size; i++)
{
char ch = s[i];
switch(ch)
{
case '(':
case '[':
case '{':
a.push(ch);
break;
case ')':
case ']':
case '}':
if(a.empty())
{
return 0;
}
char left = a.top();
if(!((left == '(' && ch ==')' )|| (left == '[' && ch ==']' )|| (left == '{' && ch =='}')))
{
return 0;
}
a.pop();
break;
befault:
break;
}
}
if(a.empty())
{
return 1;
}
else
{
return 0;
}
}
};