Contents

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目前也很常用,所以还是很值得一读