LeetCode刷题笔记
目录
2744.最大字符串配对数目
思路:模拟
遍历每一个字符串,将每一个字符串都放入哈希表中,在放入哈希表之前,反转字符串,判断哈希表中是否已存在反转后的字符串,若已存在,则证明配对成功。
代码
2745.构造最长的新字符串
思路:分类讨论
(1)如果x>y,显然 AA 最多只能放进来 (y+1) 个,因为剩下的 AA 后面就没东西可以接了。而 AB 可以放在最开头,形成 ABAB...ABAABBAABB...AA 这样的字符串。因此这种情况的答案是 (2y+1+z)×2。
(2)如果 x=y,我们可以形成
ABAB...ABAABBAABB...AABB
这样的字符串。因此这种情况的答案是2(x+y+z)×2。(3)如果 x<y,和第一类情况相似,
BB
最多只能放进来(x+1) 个,否则剩下的BB
前面就没东西可以接了。而 AB 可以放在最末尾,形成 BBAABBAA...BBABAB...AB 这样的字符串。因此这种情况的答案是 (2x+1+z)×2。
代码:
2746.字符串连接删减字母
思路:DP
DP。一个经典的状态压缩方式是因为处理完前 i 个串时,第 i 个串要么在最前面,要么在最后面,所以拼成的串的头或者尾是确定的。这样先消掉一个 ∣Σ∣ 的复杂度。
具体地,添加完第 i−1 个字符串 x…y,接下来将添加第 i 个字符串 时,令 f[j] 表示使用前 i−1 个字符串得到的字符串开头为 j,结尾为 y(即以第 i−1 个字符串结尾)时能重叠的最多字符数。类似地,令 [j] 表示使用前 i−1 个字符串得到的字符串结尾为 j,开头为 x(即以第 i−1 个字符串开头)时能重叠的最多字符数。
(1)在 f[j] 前添加第 i 个字符串。转移到 f1[y],如果 y1=j 则可以多重叠一个字符。注意对于所有 j 转移到的地方是一样的,所以只需维护 f 数组中的 max。
(2)在 f[j] 后添加第 i 个字符串。仍然转移到 f[j],但如果 y=x1 则可以多重叠一个字符。注意对于所有 j 这个增量是一样的,所以可以维护对整个 f 的一个增量标记 add。
代码:
2747.统计没有收到请求的服务器数目
思路:滑动窗口
为方便回答询问,可以把 logs 的时间和询问都从小到大排序。对于询问,为了不打乱顺序,可以创建一个下标数组对其排序。由于询问的窗口大小是固定的,所以可以用滑动窗口(双指针)来算,维护窗口内的各个服务器收到了多少次请求 cntcnt,以及没有收到请求的服务器数目。
代码:
- 点赞
- 收藏
- 关注作者
评论(0)