给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
题目链接~~~~~~
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
思路:遇到左括号入栈,遇到右括号匹配栈顶,匹配成功则出栈
(用数组模拟栈来实现)
char save(char a){
if(a=='}') return'{';
if(a==']') return'[';
if(a==')') return'(';
return 0;
}//方便匹配,定义遇到右括号的返回值
bool isValid(char * s){
int n=strlen(s);//计算长度
int arr[n+1];//存放左括号,相当于入栈
int top=0;//用top标记数组最后一个元素(相当于标记栈顶)
if(n%2==1)
{
return false;
}//括号总数为奇数时一定不匹配
for(int i=0;i<n;i++)
{
if(s[i]=='{'||s[i]=='['||s[i]=='(')
{
arr[top]=s[i];
top++;
}//将左括号放到数组里(入栈)
else
{
if(top!=0&&arr[top-1]==save(s[i]))//遇到右括号时进行匹配
{
top--;//出栈
}
else
{
return false;
}
}
}
return top==0;//可能碰到数组不空的情况,这里还不能直接返回ture
}