20. 有效的括号
写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点
1.栈 3
- 解题步骤
- 将所有指定的括号放在一个unorderd_map中去,制定好对应的key-value。
- 然后为true的情况就是能把内部的括号依次对应删除,那么就是有效的括号。
- 为false的情况就是括号内部不对应,或者括号左右不匹配
class Solution {
public:
bool isValid(string s) {
unordered_map<char,int>ans{{'(',1},{'{',2},{'[',3},{')',4},{'}',5},{']',6}} ;
stack<char>temp;
for(char i:s){
if(ans[i]>=1&&ans[i]<=3) temp.push(i);
else if(!temp.empty()&&ans[temp.top()]+3==ans[i]) temp.pop();
else return false;
//else if的逻辑就是把正确的归为一类,剩下的都是不对的不用管
}
if(!temp.empty()) return false;
else return true;
}
};
时间复杂度/空间复杂度分析/面试场景如何作答
面试场景
- 不同情形的解题方式:无
- 时间复杂度:最坏的情况就是每一个元素都入栈出栈,o(n)。
- 空间复杂度:最坏的情况就是每一个元素都入例如((((((。
知识点及反思
- 多使用else if。
- unordered_map的初始化。
- 多考虑不同的情况?