题目描述
代码解决
class Solution { public:bool isValid(string s) {// 如果字符串长度为奇数,不可能是有效的括号字符串if(s.size() % 2 != 0) return false;// 使用栈来存放括号stack<char> st;// 遍历字符串中的每一个字符for(int i = 0; i < s.size(); i++){// 如果是左括号,则将对应的右括号入栈if(s[i] == '('){st.push(')');}else if(s[i] == '{'){st.push('}');}else if(s[i] == '['){st.push(']');}// 如果是右括号,检查栈是否为空或栈顶元素是否匹配else if(st.empty() || st.top() != s[i]){return false;}// 如果栈顶元素匹配当前的右括号,则将栈顶元素弹出else{st.pop();}}// 最后检查栈是否为空,如果为空则表示括号匹配有效return st.empty();} };
字符串长度检查:
if(s.size() % 2 != 0) return false;
- 如果字符串长度是奇数,直接返回
false
,因为括号必须成对出现。定义栈:
stack<char> st;
- 使用栈来存储括号,方便检查匹配情况。
遍历字符串:
for(int i = 0; i < s.size(); i++)
- 遍历字符串的每一个字符。
处理左括号:
if(s[i] == '(') { st.push(')'); }
else if(s[i] == '{') { st.push('}'); }
else if(s[i] == '[') { st.push(']'); }
- 如果遇到左括号('(', '{', '['),将对应的右括号(')', '}', ']')入栈。
处理右括号:
else if(st.empty() || st.top() != s[i])
- 如果遇到右括号(')', '}', ']'),检查栈是否为空或栈顶元素是否不匹配当前右括号。如果栈为空或不匹配,则返回
false
。else { st.pop(); }
- 如果栈顶元素匹配当前右括号,则将栈顶元素弹出。
检查栈是否为空:
return st.empty();
- 最后检查栈是否为空,如果为空则表示括号匹配有效,否则无效。