# 第六十六周ARTS总结

# Algorithm

72ms | 5.49% Run time
40.1MB | 17.91% Memory

public boolean isScramble2(String s1, String s2) {
    if (s1.length() != s2.length()) return false;
    return solve(s1, s2);
}

Map<String, Boolean> map = new HashMap<>();

private boolean solve(String a, String b) {
    int n = a.length();
    if (a.equals(b)) return true;

    String key = a + " " + b;
    if (map.containsKey(key)) {
        return map.get(key);
    }

    boolean flag = false;

    for (int i = 1; i <= n - 1; i++) {
        boolean noswap = solve(a.substring(0, i), b.substring(0, i)) &&
                solve(a.substring(i), b.substring(i));

        boolean swap = solve(a.substring(0, i), b.substring(n - i)) &&
                solve(a.substring(i), b.substring(0, n - i));

        if (swap || noswap) {
            flag = true;
            break;
        }
    }

    map.put(key, flag);
    return flag;
}
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

# Review

# Tip

  • aar的一些常识:
    • 注意事项:
      1. 应用模块的minSdkVersion必须大于等于Library Module中定义的版本
      2. 资源合并问题,通过resourcePrefix "<前缀>"来规范化资源命名
      3. assets资源需要放在应用模块中,不支持放在aar文件中
      4. aar的混淆

        注意:aar的混淆规则可能会影响APP,因此不需要把aar的混淆规则设置的太大

      5. 使用Android Studio打包出来的aar,不会将其依赖的三方库打包进去
  • Calendar.getInstance().get(Calendar.MONTH)是从0开始的,而不是1
  • 熟练的使用剪切板功能进行数据传递
  • RecyclerView的相关类:
    • LayoutManager:用于对RecyclerView内部的View测量以及排版
    • ItemDecoration:用于对RecyclerViewView之间的间隔进行绘制,onDrawOver很有意思
    • SnapHelper:用于让RecyclerView滑动过程始终让指定条目居中
  • 搭建APP时需要注意的点:
    • 使用AndroidAutoSize来进行屏幕的适配
    • 使用git的提交次数作为版本号,使用tag的名称作为版本名称
    • 不同环境的配置直接写在gradle文件中,切换环境不需要手动修改代码
    • 正式环境不允许抓包,通过配置networkSecurityConfig来实现
    • 所有的单色图片都只保留一种,通过tint来着色
    • gradle中配置resourcePrefix来规范资源的前缀
    • 不管采用那种架构方式,都按照业务进行分包

# Share

暂无内容

更新时间: 10/20/2022, 7:04:01 AM