ARTS 2023.8.21-2023.8.27 (第一周)
💡ARTS:
A:至少每周完成一道Leecode的算法题;
R:阅读并点评至少一篇英文技术文章;
T:学习至少一个技术技巧;
S:分享一篇有观点和思考的技术文章;
Algorithm🤦♀️
题目: 20.有效的括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()” 输出:true
示例 2:
输入:s = “()[]{}” 输出:true
示例 3:
输入:s = “(]” 输出:false
提示:
- 1 <= s.length <= 104
- s 仅由括号 ‘()[]{}’ 组成
解题思路:
- 当第一次读到题目时,首先想到的是可以通过前一个字符与后一个字符对比,以为
(
与)
ASCLL相差是1(char[i+1] - char[i] == 1) ,结果他们并不是简单的相差1 (如下图) 的关系;他们并不是这样简单的关系;所有此方法并不通;
- 第二个解题思路是使用字符串替换的方式,当出现成对的 “()” “{}” “[]” 时,使用字符串replace方法把他们替换成空字符串"“,然后在最后对比替换后是否是空字符”"即可,但是测试还是失败的,因为题目如下情况也返回的是tuue;所以这种方式也行不通;
-
- “( { [ ] } )”
- 在想到栈结构好像是可以表示两种状态,入栈与出栈.并且如果返回true的话肯定字符串长度是偶数;所有通过枚举把遇到’(‘时,吧’)‘入栈,遇到…,当遇不到’(’ ‘{’ ']'是说明当前遇到的就是他们的反向字符,通过当前字符并出栈对比即可;
public static boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for (Character s2 : s.toCharArray()) {
if (s2.equals('(')) {
stack.push(')');
} else if (s2.equals('{')) {
stack.push('}');
} else if (s2.equals('[')) {
stack.push(']');
//对比,并且是有顺序的
} else if (stack.isEmpty() || !s2.equals(stack.pop())) {
return false;
}
}
//表示都是成对出现
return stack.isEmpty();
}
Review📝
Medium是一个不错的阅读网站.
本次随缘浏览到Medium点进去就看到标题为 <<Why 99% of People Fail to Learn to Code>> 为什么99%的人学习不会编程.
网址: https://medium.com/@dogukanozdemir/why-99-of-people-fail-to-learn-to-code-4e1bf0ab4b9c
文章内容主要说了三个大点
- Avoid Tutorial Hell at all costs.
- Look for tutorials that have you build something with them.
- Learn how to propely Google
大概的意思
- 学习编程时候要避免"教学地狱"学习方式,不能学完一个知识的内容就去学下一个知识,没有实际的去敲代码做项目;积极应用所学到的知识,然后尝试将自己的想法加入到代码中;
- 去寻找有用的教学资源,不要纠结太多在基础概念的知识上,寻找的教学内容应该是以实践为导向,找到不只是解释基础知识的教程,而是让你从一开始就构建一些东西。你会在实践中学习,这比看别人解释概念更吸引人,更令人难忘。
- 学习如何使用谷歌搜索引擎;如何正确地使用Google搜索是一项重要的技能,有效的搜索可以帮助我们节约很多时间;说白了就是要提供具体的错误信息;
例如: “我如何将数据库添加到我的Spring应用程序”应该是“连接Node.js到MongoDB”;不要告诉你错误了,而是要告诉你错误了什么;
编程不仅仅是记忆语法或阅读一本书,它更多的是关于构建东西和解决问题。
Tip🐾
本次介绍的是Linux里的一个命令 sed
,全称 stream editor (数据流编辑器);sed 是以数据流的方式对文本内容进行编辑;编辑器无非就是对数据的增删改查;
对 test.txt 文件进行操作;
[root@iZbp159sap0st00ew51eu1Z ~]# cat test.txt
hello Jobs
hello Pony
hello Jack, hi Jack
默认情况下,sed
指令并不会对源文件进行直接修改,而且只会把处理好的内容打印到控制台,如果想直接操作文件需要加上 -i
参数;
- 添加内容 (插入与追加)
sed -i '1i\hi xzy' test.txt
cat test.txt
>hi xzy
hello Jobs
hello Pony
hello Jack, hi Jack
sed -i '1a\hi xzy' test.txt
cat test.txt
>hi xzy
hi xzy
hello Jobs
hello Pony
hello Jack, hi Jack
一般sed 命令会把script (脚本)使用单引号 ''
进行表示;
1i
表示在第1行insert (插入) 斜杠\ 后面的内容,即 hi xzy;1a
表示在第1行append (追加) 斜杠\ 后面的内容,即 hi xzy;
\
在这里表示分隔指令与内容,注意不是 /
,请勿混淆!!
- 替换内容
2.1 把文件的 hi 改为 hello
sed -i 's/hi/hello/' test.txt
cat test.txt
>hello xzy
hello xzy
hello Jobs
hello Pony
hello Jack, hello Jack
2.2 现在我们把内容改改,把一二行合成一行,然后在把hello改成hi看看结果;
hello xzy hello xzy
hello Jobs
hello Pony
hello Jack, hello Jack
sed -i 's/hello/hi/' test.txt
cat test.txt
>hi xzy hello xzy
hi Jobs
hi Pony
hi Jack, hello Jack
我们发现好像只有每一个行第一个匹配到hello
才会被替换成hi
,要想全局替换的话我们需要再单引号结尾在加上’/g’参数,咱们马上去试一试看看是不是;
s/
替换字符参数 (substitute) 第一个/
后面表示要匹配的字符 第二个/
表示替换的内容;默认匹配到每一行的第一个;
第一个/
前面类似正则表达式,1,3s/
表示第1行到第三行,不管是 s、i、d都可以搭配一起使用;
- 删除
其实和添加类似;
3.1 删除第几行
#删除1到2行
sed -i '1,2d' test.txt
cat test.txt
>hi Pony
hi Jack, hi Jack
3.2 匹配带某个字符所在的行进行删除
hi Pony
hi Jack, hi Jack
- 把 Jack 字符所在的行删除
sed -i '/Jack/d' test.txt
cat test.txt
>hi Pony
总结:
-
除了上述常用的命令外,
sed
命令还有很多玩法,例如找出包含xx字符的那些行,将这些行中的 yy字符替换成zz; -
sed 命令很强大,在进行批量替换时会经常使用得到,学好改指令可以提高工作效率;可以去看看陈浩老师所发表过的博客文字;
-
- https://coolshell.cn/articles/9104.html
Share🎨
昨晚上躺在床上刷微信订阅号的时候, 突然被一个为 “震撼!国产自研多环境开发软件 CEC-IDE 问世!遥遥领先!!” 成功引起了我的注意,很好奇的点了进去看了一下,进去看到的第一句话 “震撼到了!厉害!继国产自研浏览器、国产自研操作系统、国产自研手机系统后的全新力作:国产自研 IDE!” 我本来确实也震惊到了,原来国内已经有那么多自研"可代替"的产品,只不过在我的刻本印象里我的朋友包括我自己基本都是在使用国外开源的软件,例如 VSCODE,谷歌浏览器等等…现在终于有了遥遥领先的自研的国产的IDE了,作为一个民族自豪感很强的人,能不兴奋吗?
该IDE名为 “CEC-IDE” ,是一款由数字广东公司与麒麟软件联合打造的,是国内首个适配国产操作系统、自主创新的一款安全、专业且功能强大的集成开发环境。
官网:https://cecide.digitalgd.com.cn/monorepo/app-front/home (现在访问貌似有问题了,不知道是不是用户使用太多了,没有考虑到高并发;还是寡人能力不够没资格使用的原因)
很庆幸国产IDE的“卡脖子”问题终于得到了完美解决,并且与 VSCODE 插件完美无缝兼容,为了方便客户减少学习成本,能把产品做到与VSCODE 99%一致,并且还推迟了微软从来没有推迟的“会员功能”,这很创新,遥遥领先!
现在是等待该官网进行恢复访问,迫不及待的想去试一试遥遥领先且自研的国产软件,毕竟是国产的肯定是会去支持拥护,同时呼吁大家一起支持国产,只要这样才能更加鼓舞更多的开发者去钻研突破“卡脖子”技术难题,国产软件崛起之路任重而道远!!