题解 | #有效括号序列#
有效括号序列
https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2
class Solution {
public:
/**
*
* @param s string字符串
* @return bool布尔型
*/
bool isValid(string s) {
// write code here
if(s.length()%2!=0)//如果符号出现奇数个,则一定不匹配
return false;
stack <char> stc;//创建字符堆栈
for(int i=0;i<s.length();i++)//遍历整个字符数组进行处理
{
//对左侧符号进行入栈操作,筛掉所有左侧符号,便于出栈和右侧符号进行比较
if(s[i]=='(')
{
stc.push(s[i]);
continue;
}
else if(s[i]=='[' )
{
stc.push(s[i]);
continue;
}
else if(s[i]=='{' )
{
stc.push(s[i]);
continue;
}
else if (stc.empty())//判断没有出现左侧符号时,则当前一定为右侧符号,如果堆栈无元素,则没有可与当前右侧符号匹配的项,匹配失败
return false;
//堆栈不为空,对当前右侧号进行匹配,弹出堆栈符号
char temp=stc.top();
//进行匹配
if(s[i]==')'&&temp=='(')
{
stc.pop();
continue;
}
else if(s[i]==']' &&temp=='[')
{
stc.pop();
continue;
}
else if(s[i]=='}' &&temp=='{')
{
stc.pop();
continue;
}
else
return false;//弹出左侧符号都不匹配,则整个符号集匹配失败
}
//经过上面的处理好,再对符号集全为左侧符号或右侧符号进行判断,这种情况也是匹配失败的情况
if(stc.size()!=0)
return false;
//上面全部匹配成功,返回true
return true;
}
};
#组队刷题##C++工程师##24届#
