这段代码实现了一个用于验证括号匹配的算法,判断给定的字符串中的括号是否配对并且顺序正确。它通过使用栈来模拟括号的入栈和出栈操作,检查所有括号的配对情况。
代码:
class Solution {
public:
/**
* @param s string字符串
* @return bool布尔型
*/
bool isValid(string s) {
// 定义一个字符栈,用于存储左括号
stack<char> st;
// 获取字符串 s 的长度
int n = s.size();
// 遍历字符串 s 的每个字符
for(int i = 0; i < n; i++) {
// 如果栈不为空,且当前字符 s[i] 是右括号且栈顶元素为对应的左括号
if(!st.empty() && ((s[i] == ']' && st.top() == '[') ||
(s[i] == '}' && st.top() == '{') ||
(s[i] == ')' && st.top() == '('))) {
// 弹出栈顶元素,表示成功配对一对括号
st.pop();
} else {
// 否则将当前字符 s[i] 压入栈中
st.push(s[i]);
}
}
// 最后检查栈是否为空,如果为空则说明所有括号都成功配对
return st.empty();
}
};
代码流程总结
- 初始化一个空栈
st
。 - 遍历字符串
s
的每个字符:- 如果是左括号
(
,{
,[
,将其压入栈中。 - 如果是右括号
)
,}
,]
,则检查栈顶元素是否为对应的左括号。如果是,则弹出栈顶元素,表示一对括号成功配对;如果不是,则将当前右括号压入栈。
- 如果是左括号
- 遍历结束后,如果栈为空,说明所有括号都成功配对,返回
true
;否则返回false
。
示例
- 输入:
s = "()"
,输出:true
- 输入:
s = "([)]"
,输出:false
- 输入:
s = "{[]}"
,输出:true