# 第六十六周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
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的一些常识:
- 注意事项:
- 应用模块的
minSdkVersion
必须大于等于Library Module
中定义的版本 - 资源合并问题,通过
resourcePrefix "<前缀>"
来规范化资源命名 - assets资源需要放在应用模块中,不支持放在aar文件中
- aar的混淆
注意:aar的混淆规则可能会影响APP,因此不需要把aar的混淆规则设置的太大
- 使用Android Studio打包出来的aar,不会将其依赖的三方库打包进去
- 应用模块的
- 注意事项:
Calendar.getInstance().get(Calendar.MONTH)
是从0开始的,而不是1- 熟练的使用剪切板功能进行数据传递
RecyclerView
的相关类:LayoutManager
:用于对RecyclerView
内部的View
测量以及排版ItemDecoration
:用于对RecyclerView
中View
之间的间隔进行绘制,onDrawOver
很有意思SnapHelper
:用于让RecyclerView
滑动过程始终让指定条目居中
- 搭建APP时需要注意的点:
- 使用AndroidAutoSize来进行屏幕的适配
- 使用git的提交次数作为版本号,使用tag的名称作为版本名称
- 不同环境的配置直接写在gradle文件中,切换环境不需要手动修改代码
- 正式环境不允许抓包,通过配置networkSecurityConfig来实现
- 所有的单色图片都只保留一种,通过tint来着色
- 在gradle中配置
resourcePrefix
来规范资源的前缀 - 不管采用那种架构方式,都按照业务进行分包
# Share
暂无内容