ARTS_18

什么是 ARTS?

  1. 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习
  2. 阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平
  3. 技巧 (Tip):学习至少一个技术技巧,总结、归纳日常工作中遇到的知识点
  4. 分享(Share):分析一篇有观点和思考的技术文章,建立影响力,输出价值观

时间周期
10 月 24 日至 10 月 30 日

一:算法:

一:算法:
题目描述:

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:
输入: "()"
输出: true

示例 2:
输入: "()[]{}"
输出: true

示例 3:
输入: "(]"
输出: false

示例 4:
输入: "([)]"
输出: false

示例 5:
输入: "{[]}"
输出: true

前置知识

第一种思路:
使用栈,便利输入字符串。
如果当前字符味左半边括号是,则将其压入栈中。
如果遇到右半边括号时,分类讨论:

  1. 如栈不为空且对应的左半边括号,则取出栈顶元素,继续循环
  2. 若此时栈为空,则直接返回 false
  3. 若不为对应的左半边括号,则返回 false

复杂度分析:
时间复杂度: O(n)
空军复杂度:O(n)

关键点解析

  1. 栈的基本特点和操作
  2. 可以勇数组来模拟栈

比如 入:push 出:pop 就是栈
入:push 出:shift 就是队列。

javaScript 解法

/*
 * @param {string} string
 * @return {boolean}
*/

let isValid = function (string) {
  let valid = true;
  const stack = []
  const mapper = {
    '{': '}',
    '[': ']',
    '(': ')'
  }

  for (let i in string) {
    const value = string[i]
    if (['[', '{', '('].indexOf(value) > -1) {
      stack.push(value)
    } else {
      const peak = stack.pop()
      if (value !== mapper[peak]) {
        return false
      }
    }
  }
  if (stack.length > 0) {
    return false;
  }
  return valid
}

Python

class Solution:
  def isValid(self,s):
    stack = []
    map = {
      '{': '}',
      '[': ']',
      '(': ')'
    }
    for x in s:
      if x in map:
        stack.append(map[x])
      else:
        if len(stack) != 0:
          topElement = stack.pop()
          if x != topElement:
            return False
          else:
            continue
        else:
          return False
    return len(stack) == 0

Java

class Solution {
  public boolean isValid(String s) {
    // 1. 判断空字符串
    if (s.isEmpty()) {
      return true;
    }
    // 2. 创建辅助线
    Stack stack = new Stack<>();
    // 3. 仅遍历一次
    for (char c : s.toCharArray()) {
      if(c == '(') {
        stack.push(')');
      }else if(c == '[') {
        stack.push(']');
      }else if(c == '{') {
        stack.push('}');
      }else if(stack.isEmpty() || c != stack.pop()) {
        return false;
      }
    }
    // 4. 返回
    return stack.isEmpty();
  }
};

第二种思路
正则匹配:
不断消除 ‘[]’ , ‘()’, ‘{}’,最后判断剩下的是否是空串即可。

Python

class Solution:
  def isValid(self, s):
    while '[]' in s or '()' in s or '{}' in s:
      s = s.replace('[]','').replace('()', '').replace('{}', '')
    return not len(s)

JavaScript

var isValid = function (s) {
  while (s.includes("[]") || s.includes("()") || s.includes("{}")) {
    s = s.replace("[]", "").replace("()", "").replace("{}", "");
  }
  s = s.replace("[]", "").replace("()", "").replace("{}", "");
  return s.length === 0;
};

二:阅读

中文:《软技能 2:软件开发职业生涯指南》
推荐理由:

  1. 介绍软件开发者的如何入门,入门之后如何提高,怎样规划整个职业生涯,对于这些问题提供了一整套的可参考答案

三:技巧

React Router 6 (React 路由) 最详细教程 - 腾讯云开发者社区-腾讯云
分享理由:

  1. 前端技术变化真的是月新月异啊,我好久没关注路由部分,回头一看,现在竟然到了新的版本了

四:分享

JavaScript 代码优化之道

你可能感兴趣的:(ARTS_18)