ARTS-7

ARTS是由左耳朵耗子陈皓在极客时间专栏《左耳听风》中发起的一个每周学习打卡计划。

1
2
3
4
5
6
7
Algorithm:至少做一个 LeetCode 的算法题。主要为了编程训练和学习。

Review:阅读并点评至少一篇英文技术文章。主要为了学习英文,如果你英文不行,很难成为技术高手。

Tip:学习至少一个技术技巧。主要是为了总结和归纳你日常工作中所遇到的知识点。

Share:分享一篇有观点和思考的技术文章。主要为了输出你的影响力,能够输出你的价值观。

Algorithm(算法)

leetcode394

题目链接:https://leetcode-cn.com/problems/decode-string/

参考视频:https://www.youtube.com/watch?v=Qoz3ujccNQY

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a2[4] 的输入。

示例:

1
2
3
s = "3[a]2[bc]", 返回 "aaabcbc".
s = "3[a2[c]]", 返回 "accaccacc".
s = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef".

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class Solution {

/*
s = "3[a2[c]]"

accaccacc
*/
public String decodeString(String s) {
// 存储重复的次数
Deque<Integer> numStack = new ArrayDeque<>();
// 存String
Deque<String> strStack = new ArrayDeque<>();


StringBuilder tail = new StringBuilder();
int n = s.length();
for (int i = 0; i < n; i++) {
char c = s.charAt(i);
// 如果是数字
if (Character.isDigit(c)) {
int num = c - '0';
// 判断下一位是否也是数字
while (i + 1 < n && Character.isDigit(s.charAt(i + 1))) {
num = num * 10 + s.charAt(i+1) - '0';
i++;
}
numStack.push(num);
} else if (c == '['){
// 遇到左括号,将tail变为字符串存到strStack
strStack.push(tail.toString());
// 清空 tail
tail = new StringBuilder();
} else if (c == ']') {
// 弹出 strStack 赋值给 tmp a
StringBuilder tmp = new StringBuilder(strStack.pop());
// 获取重复次数
int repeatedTimes = numStack.pop();
for (int j = 0; j < repeatedTimes; j++) {
tmp.append(tail);
}
tail = tmp;
} else {
tail.append(c);
}
}
return tail.toString();
}
}

Review(点评)

The 4 Tenets of Good Documentation

良好文档的四个原则

好的代码文档必须告诉下一个开发人员(即使是同一个人)以下四点信息:

  • 目的:为什么编写代码(是库,代码段,方法或类)
  • 功能:代码在做什么
  • 形式:代码如何实现其功能
  • 用法:如何使用代码。

Tip(技巧)

实际项目中,会用VO类返回数据给前端数据,有时候如果VO有字段是LocalDatatime,返回的时间数据中间可能会带有T字符,比如”2019-10-11T11:11:11”,这个时候在时间字段上加上@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 注解即可。

1
2
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;

Share(分享)

排序算法

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2023 高行行
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信