week19
+ 本周只有四道题(?187 - 重复的DNA序列
感觉这个题 也不是KMP.. 主要是子串要枚举很多次 字符串哈希吧应该是
复习一下KMP tmd 写一次忘一次(暴躁)
int n = s.size(), m = p.size();
s = ' ' + s, p = ' ' + p;
vector<int> ne(m + 2);
// 1. 统计ne
for(int i = 2, j = 0; i <= m; i++)
{
while(j && p[i] != p[j + 1]) j = ne[j];
if(p[i] == p[j + 1]) j++;
ne[i] = j;
}
// 2. KMP匹配
for(int i = 1, j = 0; i <= n; i++)
{
while(j && s[i] != s[j + 1]) j = ne[j];
if(s[i] == p[j + 1]) j++;
if(j == m)
{
// 匹配成功的逻辑
}
}这题应该就是字符串哈希了, 这里除了常规的字符串哈希逻辑之外, 找到出现过的就清空 这里就直接改count就好了
188 - 买卖股票的最佳时期IV
是的 这题就是状态机模型 股票终极版
首先,提前判断-> 如果k足够大, 就相当于 可以无限买卖 这样的话实际就是之前做过的122题 当时那个把整段交易拆分成每天交易一次的思想
除了这个之外, 状态机模型:

189 - 旋转数组
要求使用空间复杂度为 O(1) 的 原地 算法
将整个数组翻转一遍
[1,2,3,4,5,6,7] -> [7,6,5,4,3,2,1]
将前k个数翻转 后k个数翻转
-> [5,6,7, | 1,2,3,4]
翻转可以采用双指针算法,空间复杂度是o(1)的
190 - 颠倒二进制位
从右到左扣出每一位 反过来补给res上
Last updated