题目描述
代码解决
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();
- 最后检查栈是否为空,如果为空则表示括号匹配有效,否则无效。