# 2023-10-24
1024: 程序员节,这天我决定开始记录日常了。虽然不知道会坚持多久,但是先从今天开始吧。
- 设计模式
- 观察者模式 主题(Subject):主题维护一个观察者列表,当主题有更新时,通知所有观察者。并提供添加、移除订阅者的方法 观察者(Observer): 观察者是订阅主题的对象,当主题有更新时,观察者会收到通知并做相应的处理(如更新状态) 举例:
- 张三和李四 都订阅了 同一个微信 订阅号,当订阅号有更新时,张三和李四都会收到推送通知。如果某天张三取消了订阅,那么只有李四收到推送通知了。
- 米粉们 订阅了 小米商城 商品,当小米商城有更新时,米粉会收到推送通知。
应用场景:
- 发布订阅模式
# 2023-10-25
力扣简单题:有效的括号
题目:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true 示例 2:
输入:s = "()[]{}"
输出:true 示例 3:
输入:s = "(]"
输出:false
提示:
- 1 <= s.length <= 104
- s 仅由括号 '()[]{}' 组成
typescript
/**
* @param {string} s '()[]{}'
* @return {boolean}
* 思路:
* 1.先判断字符串长度,奇数直接返回false
* 2. 遍历字符串,
* 遇到左括号入栈【对应的右括号,因为一会遇到右括号判断是否匹配】,遇到右括号出栈,如果出栈的括号不匹配,则返回false
* 最后判断栈是否为空,为空则返回true
* 比如: '()[]'
* 1. '(' 遇到左括号入栈 => [')']
* 2. ')' 遇到右括号出栈 => 栈顶元素 ')' => 与栈顶元素匹配 出栈: []
* 3. '[' 遇到左括号入栈 => [ ']' ]
* 4. ']' 遇到右括号出栈 => 栈顶元素 ']' => 与栈顶元素匹配 出栈: []
* 以此类推
* 规律就是 遇到一个右括号 必须有匹配的左括号,否则返回false
*/
function isValid(s='') {
if (s.length % 2 !== 0) return false;
const stack= []
const map = {
'{': '}',
'(': ')',
'[': ']',
}
for (const item of s) {
let chart = map[item]
if (chart) {
stack.push(chart)
} else {
const top = stack.pop();
if (top !== item) {
return false
}
}
}
return !stack.length
};
console.log(isValid('({})'))
新鲜事儿
- 语雀故障后续 福利 => 6个月会员 (已领)
- 政府发布: 2024年假日规则, 除夕貌似还要上班呢(xxxx)