中级农民
- 积分
- 105
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2020-4-18
- 最后登录
- 1970-1-1
|
本帖最后由 快乐小猪 于 2020-5-22 18:18 编辑
太久不刷题了 肌肉记忆已经完全没有了。。
今天打卡438. Find All Anagrams in a String
犯了很多低级错误 但是都反映了自己的coding习惯不好 基础不扎实 需要多加练习 改正
1. 有一步 先挪动指针 然后减少了频次 应该先减少频次 后挪动指针 ==》 index对应不好 应该加强自己对index的对应关系的思考 并且要100% percent sure自己对应上了
2. edge case 没有考虑 what about s'length is more than p's length? ==> 应该加强对edge case 的思考
3. TLE
- 1. 思考while loop是不是出不来
- 2. 思考时间复杂度是不是高了。
比较两个map里对应的词频,我选择遍历p的每个char,然后在map里取出频次并比较,相比于直接取map的entry比较两个map的词频,做了很多重复计算。我选择的方法是比较了每个char,而用entry比较的方法是比较了unique char的词频,在string长度很长的情况下,第二种方法会有很明显的优势。
4. 比较词频时 用了map1.get(key) == map2.get(key) 来判断。They are objects so they are comparing the reference. But in java, when Integer is between -128 to 127, reference are the same since autoboxing use Integer.valueOf which caches small Integer. 这里我们还是应该用equals来进行值比较。
个人感觉自己写的不是最优解,明天应该再看看如何优化。
另外对自己的一个建议就是 遇到bug的时候要耐心思考 不是觉得自己的代码没问题 怎么还会出bug。。尤其面对一个又一个bug的时候 更加应该细心 一步一步检查。。打不倒bug的除了聪明的大脑还有小强般的恒心!加油!你是最棒的!
TODO:
1. 优化
2. (拓展)学习equals()方法里hashcode的原理
|
|