Tip-Review-Algorithm 第六期

Tip

SQL复习

最近在阿里云日志服务查询用户的实时日志,需要利用SQL进行查询,一些基础语句我都忘了,就找了本《SQL 必知必会》过了一遍。

一些常用的代码片段,写在了笔记里:《SQL必知必会》笔记

另外备注下,阿里云日志服务查询的格式是:查询语句 | 分析语句。就是把SQL里的WHERE语句摘出来作为查询语句。

Review

百度App Objective-C/Swift 组件化混编之路

同事推荐了这个百度App技术公众号的文章,我来瞅瞅。

这个系列理了下大概这么几篇文章:

  1. 百度App iOS工程化实践: EasyBox破冰之旅
    主要介绍了百度的EasyBox工具,有别于CocoaPods,讲解了其设计的概念。
  2. 百度App组件化之路
    介绍了App组件化的历程,每个架构的优点和问题。
  3. 百度App Objective-C/Swift 组件化混编之路(一)
    Swift稳定是混编的背景。
  4. 百度App Objective-C/Swift 组件化混编之路(二)- 工程化
    Target内部的Module化及混编,组件内的混编,组件间的依赖。细节很丰富。
  5. 百度App Objective-C/Swift 组件化混编之路(三)- 实践篇
    改造实践。还没看~。

介绍的很详细,可以当成一份参考文档。
有很多还是没看明白,可能还是对App编译层面的知识太浅薄。

Algorithm

最小覆盖子串

描述:

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 ""

思路:

滑动窗口,拓展右边界,收缩左边界。通过字典来判断窗口是否包含目标子串。

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
49
50
51
52
53
54
55
56
57
58
59
/*
* @lc app=leetcode.cn id=76 lang=cpp
*
* [76] 最小覆盖子串
*/

// @lc code=start
class Solution {
public:
string minWindow(string s, string t) {
unordered_map<char, int> target;
unordered_map<char, int> window;
for (char ch : t) {
target[ch] += 1;
}

int left = 0, right = 0;
int valid = 0;
int start = 0, len = INT_MAX;

while (right < s.size())
{
char ch = s[right]; // 窗口新增字符
right ++;

if (target.count(ch))
{
window[ch] += 1;
if (window[ch] == target[ch])
{
valid += 1;
}
}

// 收缩左边界
while (valid == target.size())
{
if (right - left < len)
{
start = left;
len = right - left;
}
char d = s[left]; // 窗口移除字符
left ++;

if (target.count(d))
{
if (window[d] == target[d])
{
valid -= 1;
}
window[d] -= 1;
}
}
}
return len == INT_MAX ? "" : s.substr(start, len);
}
};
// @lc code=end