给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:false
bool isValid(char* s) { 栈的数据结构,先进后出
char stack[10000]={0}; //随便定义的
char *p=stack; //随便指的
int left=0,right=0; //双指针法
if(strlen(s)%2 !=0){
return false; //不成双直接干掉
}
for(int i=0;i<strlen(s);i++){
if(*(s+i)=='('||*(s+i)=='{'||*(s+i)=='['){
stack[right]=*(s+i); //(,{,[放进去1个,右指针+1
right++;
}else if(right<1){
return false; //面向答案加的
}else if(
(*(s+i)==')'&&stack[right-1]=='(') ||
(*(s+i)=='}'&&stack[right-1]=='{') ||
(*(s+i)==']'&&stack[right-1]=='[')
){
right--; //遇到),},]判断stack顶上那个,对的话右指针-1,不对直接干掉
}else{
return false;
}
}
if(left==right){ //都结束看看两个指针合并了没,合并说明消光了,没消光直接干掉
return true;
}else{
return false;
}
}