字符串的删除,重构匹配-leetcode,524,767,1054(学习优先队列的用法),355(优先队列重载比较函数)

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(),以及优先队列比较函数的重载

原创文章 23 获赞 23 访问量 1721

猜你喜欢

转载自blog.csdn.net/LLM1602/article/details/105083322