本题来源---《有效的括号》
题目描述
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
bool isValid(char* s)
{
}
解题思路
根据题意,我们可以推断出以下要点:
有效括号字符串的长度,一定是偶数!
右括号前面,必须是相对应的左括号,才能抵消!
右括号前面,不是对应的左括号,那么该字符串,一定不是有效的括号!
代码如下
char pairs(char a)
{
if( a == '}' ) return '{';
if( a == ']' ) return '[';
if( a == ')' ) return '(';
return 0;
}
bool isValid(char* s)
{
int n = strlen(s);
int stack[n+1];
int top = 0;
int ch = 0;
int i = 0;
if( n % 2 == 1 )
{
return false;
}
for(i=0; i<n; i++)
{
ch = pairs(s[i]);
if( ch )
{
if( top == 0 || stack[top-1] != ch )
{
return false;
}
top--;
}
else
{
stack[top++] = s[i];
}
}
return top == 0;
}
复杂度分析
时间复杂度:o(n)
空间复杂度:o(n)