什么是 ARTS?
- 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习
- 阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平
- 技巧 (Tip):学习至少一个技术技巧,总结、归纳日常工作中遇到的知识点
- 分享(Share):分析一篇有观点和思考的技术文章,建立影响力,输出价值观
时间周期
10 月 24 日至 10 月 30 日
一:算法:
一:算法:
题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
前置知识
- 栈
第一种思路:
使用栈,便利输入字符串。
如果当前字符味左半边括号是,则将其压入栈中。
如果遇到右半边括号时,分类讨论:
- 如栈不为空且对应的左半边括号,则取出栈顶元素,继续循环
- 若此时栈为空,则直接返回 false
- 若不为对应的左半边括号,则返回 false
复杂度分析:
时间复杂度: O(n)
空军复杂度:O(n)
关键点解析
- 栈的基本特点和操作
- 可以勇数组来模拟栈
比如 入: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:软件开发职业生涯指南》
推荐理由:
- 介绍软件开发者的如何入门,入门之后如何提高,怎样规划整个职业生涯,对于这些问题提供了一整套的可参考答案
三:技巧
React Router 6 (React 路由) 最详细教程 - 腾讯云开发者社区-腾讯云
分享理由:
- 前端技术变化真的是月新月异啊,我好久没关注路由部分,回头一看,现在竟然到了新的版本了
四:分享
JavaScript 代码优化之道