一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情。
一起来学点算法,这里是慢慢学算法,我是小coder,昨天我们学习了环形;链表,今天我们来玩一下有趣的括号,这是力扣的20题,一道简单题,我们来实现一下。
题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
题目分析
这个题目我们可以来分析一下,左括号和右括号成对出现,这个情况属于最近相关性问题,和最小栈的问题一样,我们只需要把左括号都放入栈中,如果碰到右括号说明左括号已经全部放入,栈顶的元素实际上就是与之匹配的括号,匹配出栈,不匹配返回false。
解题思路
确定操作对象:本题中,操作数组就1个s 确定操作条件:操作条件为符号匹配,匹配的上返回true,否则返回false。 确定操作过程:操作过程为:看栈顶元素是否匹配,匹配就弹栈,不匹配返回false,还要看是否超出边界。 确定结果返回:匹配返回true,不匹配返回false,栈剩余也返回false。
代码
class Solution {
public:
bool isValid(string s) {
for(char ch : s){
if(ch=='('|| ch=='{'|| ch=='[') a.push(ch);
else{
if(a.empty()) return false;
if(ch==')' && a.top()!='('){
return false;
}
if(ch==']' && a.top()!='['){
return false;
}
if(ch=='}' && a.top()!='{'){
return false;
}
a.pop();
}
}
return a.empty();
}
private :
stack<char> a;
};
题目总结
本题是一个最近相关性问题,题目的解法就是找到它们之间的相关性,本题中的相关性是左右括号成对出现,这个可以帮助我们干什么呢?检查代码中的括号。