【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C++语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致)
【题目描述】
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
【示例一】
输入:s = "()" 输出:true
【示例二】
输入:s = "()[]{}" 输出:true
【示例三】
输入:s = "(]" 输出:false
【提示及数据范围】
1 <= s.length <= 10的4次方
s
仅由括号'()[]{}'
组成
【代码】
// 栈
class Solution {
public:
bool isValid(string s) {
stack<int> st;
for(int i = 0;i<s.size();i++){
if(s[i] == '{' || s[i] == '[' || s[i] == '(') st.push(i);
else {
if(st.empty()) return false;
if(s[i] == '}' && s[st.top()] != '{') return false;
if(s[i] == ']'&& s[st.top()] != '[') return false;
if(s[i] == ')'&& s[st.top()] != '(') return false;
st.pop();
}
}
return st.empty();
}
};