思路一:
将字符串的左侧字符入栈,遇到右侧字符则与栈顶元素对比,看是否匹配。
最后栈一定为空。
bool isValid(std::string s){
std::stack<char> st;
for(auto c:s){
switch (c){
case '{':
case '[':
case '(':
st.push(c);
break;
case ')':
if(st.empty()== true||st.top()!='(')
return false;
else
st.pop();
break;
case '}':
if(st.empty()== true||st.top()!='{')
return false;
else
st.pop();
break;
case ']':
if(st.empty()== true||st.top()!='[')
return false;
else
st.pop();
break;
default:
break;
}
}
return st.empty();
}
简单的判断字符串的左右符号{[()]}是否匹配
运用栈解决。
还有一种思路:
字符串的‘最后’一个左侧字符(如'{')必然会接着该右侧字符(如'}'),所以只要将右侧字符入栈,然后将栈顶字符逐一与右侧字符串对比。
网友评论