Algorithm
lc784_字母大小写全排列
答案有3钟方法,bfs,dfs还有掩码方法(个人也是用的掩码方法),不过答案比本人的掩码巧妙的一个判断,去掉了一个位置的hash映射,挺好的
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: 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目前也很常用,所以还是很值得一读