有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
使用语言:C++
思路:压栈弹栈 栈的一系列操作
分析:
检验扩号是否匹配可以用“期待的紧迫程度”这个概念来描述。例如考虑下面的扩号序列:
[ ( [ ] [ ] ) ]
1 2 3 4 5 6 7 8
分析可能出现的不匹配的情况:
1)到来的右扩号并非所期待的;
2)到来的是“不速之客”;
3)直到结束,也没有到来所“期待”的;
代码:
class Solution {
public:
bool isValid(string s) {
int State=1,i=0,k=0;
char a[10000];
while(i<s.size()&&State==1){
switch(s[i]){
case '(':{a[k]='(';k++; break;}
case '[':{a[k]='[';k++; break;}
case '{': {a[k]='{';k++; break;}
case ']' : {if(k>0&&a[k-1]=='[') {a[k-1]='\0'; k--;}
else State=0;
break;
}
case ')' : {if(k>0&&a[k-1]=='(') {a[k-1]='\0'; k--;}
else State=0;
break;
}
case '}' : {if(k>0&&a[k-1]=='{') {a[k-1]='\0'; k--;}
else State=0;
break;
}
}
i=i+1;
}
if (State==1&&k==0) return true;
else return false;
}
};
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。