ARST打卡第182周[182/521]

Algorithm

lc784_字母大小写全排列

答案有3钟方法,bfs,dfs还有掩码方法(个人也是用的掩码方法),不过答案比本人的掩码巧妙的一个判断,去掉了一个位置的hash映射,挺好的

1
isalpha(s[j])

bfs,dfs在最后size加入ans队列,中途加入vector<string>临时队列也是一个常见思路,但是自己这次没有及时想出来…还得多练

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
class Solution {
vector<string> ans;
public:
// 直接递归遍历,然后到最后一层的时候添加答案
// 前面的串是要传递的
// 那样太复杂了,因为只有大小写两个状态,所以很简单,对应二进制状态数
// 30分钟, 菜了
vector<string> letterCasePermutation(string s) {
ans.clear();
int slen = s.length();
vector<bool> is_letter(slen);
unordered_map<int, int> letter_src_pos;
int letter_cnt = 0;
for (int i = 0; i < slen; i++) {
if (s[i] >= '0' && s[i] <= '9') {
continue;
}
letter_cnt++;
letter_src_pos[letter_cnt] = i;
is_letter[i] = true;
}
int status = 1 << letter_cnt;
string tmp("");
const int LETTER_GAP = 'a' - 'A';
for (int i = 0; i < status; i++) {
tmp = s;
for (int j = letter_cnt - 1; j >= 0; j--) {
int pos = letter_src_pos[letter_cnt - j];
if ((1 << j) & i) {
// 此位置为大写
if (tmp[pos] >= 'a' && tmp[pos] <= 'z') {
tmp[pos] -= LETTER_GAP;
}
} else {
if (tmp[pos] >= 'A' && tmp[pos] <= 'Z') {
tmp[pos] += LETTER_GAP;
}
}
}
ans.push_back(tmp);
}
return ans;
}
};

Review

【TED演讲】你为何只会是平凡的人(其实是你为何不去追梦)

你为什么不去追求自己想要实现的梦想,为什么要用自己需要做一个好孩子,好伴侣,好父母,好的职业生涯为借口,从而迟迟不敢把自己变成一个行动派,然后在失败后疯狂找借口,说着更多的如果当初,说着更多的除非怎么样…

别找借口,说服你内心最深处的渴望,然后大胆去做你想做的一切事情,嗯嗯

Tips

高性能IO模型分析-Reactor模式和Proactor模式

Share

《redis设计与实现》推荐阅读

这本书分析了redis的设计与实现,先从数据结构说起,然后再一一详细说明redis如何用这些数据结构实现一个kv数据库服务器的,经典,而且redis目前也很常用,所以还是很值得一读