收获与感想:
java:
整数最大值:Integer.MAXVALUE Character
map.containsKey();
获取哈希表的值:
Mapcnt =new HashMap<>(); Map ori =new HashMap<>(); public boolean cheak(){//表示当前条件是否满足最小子串的窗口之一。 for(char ch:ori.keySet()){ int val=cnt.getOrDefault(ch,0); if(ori.get(ch)>val)return false; } return true; } //想对比一下这两个函数有什么区别呢 public boolean check() { Iterator iter = ori.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Character key = (Character) entry.getKey(); Integer val = (Integer) entry.getValue(); if (cnt.getOrDefault(key, 0) < val) { return false; } } return true; }
java 中 自定义比较函数还是得多写写。 一些拆过来放回去的做法还是值得比较的。 这道题核心的东西是分类讨论加上动态规划。 这里的问题是在创建下一个节点的指针的时候,对于随机指针的指向赋值,有可能原来的链表还不知随机指针是否被创建了。
Comparator
只要和前面的状态相关,分类出好几个之后再进行讨论就好。
关键是考虑清楚一种解码方式和另一种解码方式每一种对应的解码各有什么不同。
所以用一个哈希表来存放当前指针指向的节点对应的指针指向的节点。
还有一种隐含的哈希映射方法,那就是在原来的链表基础上,间隙地插入一条新的链表。这条链表的随机指针的指向肯定已经存在了,就是原来的链表的下一节点。最后对链表进行解链还原就可以了。



