算法:
题目:有效的括号
这个题目也是做过很多回了。主要就是数据结构中"栈"的应用,先进后出。
解题思路:
1.创建 Map 哈希表形成键值对映射
2.进行遍历字符串
在遍历过程中
如果 遍历到的字符c 是左括号,则入栈 push;否则通过哈希表判断括号对应关系,若 stack 栈顶出栈括号 stack.pop() 与当前遍历括号 c 不对应,则提前返回 false。
class Solution {
public boolean isValid(String s) {
//创建一个栈
Stack<Character>stack=new Stack<>();
//创建一个哈希表,形成键值对的映射
Map<Character,Character>map=new HashMap<>();
map.put('(', ')');
map.put('[', ']');
map.put('{', '}');
for(int i=0;i<s.length();i++) {
char ch=s.charAt(i);
if(ch=='('||ch=='['||ch=='{') {
//入栈
stack.push(ch);
}else {
//如果栈不为空,将栈顶元素弹出做对比
if(!stack.empty()) {
char top=stack.pop();
//如果对应关系不正确,则将会提前返回false;
if(ch!=map.get(top)) {
return false;
}
}else {
if(stack.empty()) {
return false;
}
}
}
}
if(!stack.empty()){
return false;
}
return true;
}
}
复杂度分析:
时间复杂度O(n) : 正确的括号组合需要遍历1遍 s;
空间复杂度 O(N): 哈希表和栈使用线性的空间大小 。
这个题也是做了很多遍了,单领出来写的时候,还是存在一些问题,自己在学算法的时候还是没有整理好自己的思路,好像在追求数量,而不是质量,更重要的还是要每天坚持练习算法。
规划:
下周肯定要好好练习算法,vue还没学多少,项目接口也慢慢出来了......
插曲:
我们的项目的话每个人都在努力赶进度,但就是输出很少。昨天晚上的心情 low to the bottom ,下周加油吧~
我组的小孩儿有的学的也慢了点儿,但是,很多人都是刚开始学编程,基础挺扎实挺重要的,没关系的,只要愿意学,去赶进度,厚积薄发,也是棒棒哒!
天越黑,星星越亮,也许现在感觉路很难走,可是,坚持走下去,请相信,天会亮的。
首先你要开心,其次,都是其次。希望我组的小孩儿们也能开开心心的学习