Skip to content
On this page

# 2023-10-24

1024: 程序员节,这天我决定开始记录日常了。虽然不知道会坚持多久,但是先从今天开始吧。

  • 设计模式
  1. 观察者模式 主题(Subject):主题维护一个观察者列表,当主题有更新时,通知所有观察者。并提供添加、移除订阅者的方法 观察者(Observer): 观察者是订阅主题的对象,当主题有更新时,观察者会收到通知并做相应的处理(如更新状态) 举例:
  2. 张三和李四 都订阅了 同一个微信 订阅号,当订阅号有更新时,张三和李四都会收到推送通知。如果某天张三取消了订阅,那么只有李四收到推送通知了。
  3. 米粉们 订阅了 小米商城 商品,当小米商城有更新时,米粉会收到推送通知。

应用场景:

  1. 发布订阅模式

# 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('({})'))

新鲜事儿

  1. 语雀故障后续 福利 => 6个月会员 (已领)
  2. 政府发布: 2024年假日规则, 除夕貌似还要上班呢(xxxx)