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协程》第五章,并在公司对第五章的前三节进行了分享;