ARTS打卡 - 2023-03-W2

88 阅读1分钟

Algorithm

字符串压缩

class Solution {
    public String compressString(String S) {
        if (S == null || S.equals("") || S.length() <= 1) {
            return S;
        }
        StringBuilder sb = new StringBuilder();
        int pre = 0;
        int count = 1;
        boolean hasRepeat = false;
        for (int next = 1; next < S.length(); next++) {
            Character preChar = S.charAt(pre);
            if (preChar.equals(S.charAt(next))) {
                count++;
                hasRepeat = true;
            } else {
                sb.append(S.charAt(pre));
                sb.append(count);
                count = 1;
                pre = next;
            }
        }
        if (count > 1) {
            hasRepeat = true;
            sb.append(S.charAt(pre));
            sb.append(count);
        } else {
            sb.append(S.charAt(S.length() - 1));
            sb.append(count);
        }
        if (hasRepeat) {
            if (sb.length() >= S.length()) {
                return S;
            } else {
                return sb.toString();
            }
        } else {
            return S;
        }
    }
}

Review

5 Common mistakes Kotlin developers make (and how to avoid them)

主要讲了Kotlin一些推荐的用法:

1:使用when替代if

2:使用data数据类

3:尽量使用扩展函数

4:不要使用!!等非空断言符,使用?空判断符

5:尽量使用高阶函数

审视自己平时开发中的习惯,发现自己算是符合了上面的这些习惯的。

Tip

最近看到一个递归列表的数据结构,增删等可以通过递归来实现,挺有意思:

sealed class DisposableList {
  object Nil: DisposableList()
  class Cons(
    val head: Disposable, 
    val tail: DisposableList
  ): DisposableList()

Share

本周主要是学习了《深入理解Kotlin协程》第五章,并在公司对第五章的前三节进行了分享;

源码:github.com/enbandari/C…