1:524:https://leetcode-cn.com/problems/longest-word-in-dictionary-through-deleting/
题目:
思路:
为了更快得出结论,先将d中的字符串排序(以长度为首要原则,再以字母顺序为其次原则),有因为d中的字符串是s中删除某些字符而产生的,也就是说d中各字符出现的顺序是有一定顺序的,因此可以用下标来记录d在s中匹配到的个数,一旦个数等于d自身长度,则说明是成功的,也即可以返回该字符。
代码:1:用map(注意这个cmp的比较函数a<b,会将两字符串一个一个字符进行比较)
方法2:直接用字符串:
2:767 https://leetcode-cn.com/problems/reorganize-string/
题目:
思路:因为要相邻的字母不同,那么考虑间隔放字母就可以控制,但是字母怎么间隔放呢,也就是说字母应该以一个什么顺序存储后,再分别间隔放呢,这样考虑,将所有一样的字母挨个排列起来并以相同的数量大小,从大到小排列,比如:acbcbc,排列后:cccbba(因为c出现次数最多,a出现次数最少),再分成左右两部分ccc,bba,间隔放入结果集即可,取左边c,取右边b,左边c,右边b,左边c,右边a--》cbcbca即符合答案
代码:
3:1054:与767很相似,可以用同一种解法解出来。
题目:
思路1:同767,先统计数量,再按照从大到小排列起来,再分成左右两个,依此插入
代码:
思路2:用优先队列,这样就不用排序,并每次出队两个元素,加入到结果集,并将对应的次数--,再放入队列里,这样就可以保证相邻元素不同。
代码:
收获:优先队列的用法,priority_queue<pair<int,int>>;
355:https://leetcode-cn.com/problems/design-twitter/
题目:
思路:用一个map<int,int> 来存储关注与不关注,map<int,pair<int,int>>l来存储id,time,articleId,在获取用户推文时,先用优先队列将time,已经对应的articleId对应起来,再返回前10个,即可
代码:
收获:map的erase(),以及优先队列比较函数的重载