摘要: 原题链接 Trie的基本运用 错误思路: 将要查找前缀的字符串构建字典树,这样的结果是每个字符串都要重新构建一次树,并且我们需要预先保存要匹配前缀的单词,但题目单词数目没有讲明,所以我们必须将建树的字符串互换.(这样建树会导致MLE) 正解思路: 将前缀建树,如果达到一个结点有单词就+1,如果没有单 阅读全文
posted @ 2021-01-01 16:12 acmloser 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 原题链接 字典树模板题 错误思路: 很容易看出枚举两个数字必定TLE,但这题求最值必须枚举一个数,因此我们可以在枚举第二个数进行优化 正确思路: 在枚举第二个数时,将第一个数的每一位分开贪心求解,将范围内的数全部插入字典数中,查询是否能获得高位尽量与第一个数相反的数 1 #include <iost 阅读全文
posted @ 2021-01-01 14:07 acmloser 阅读(76) 评论(0) 推荐(0) 编辑
摘要: 原题链接 KMP+标准化+最大最小表示法 错误思路: 看到这题的第一反应是破环成链思想,枚举它能循环得到的字符串...算了下时间复杂度大概率TLE,看了别人的提示才反应过来是标准化... 正确思路: 像这种一种表示多种形态的字符串大概率用标准化了,我们用最小最大表示法求最大或最小值,用set或map 阅读全文
posted @ 2021-01-01 10:17 acmloser 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察: KMP+字符串的最小最大表示法 如果不懂字符串的最小最大表示法走这:GO (我认为是讲得很详细的) 当我们利用字符串的最小最大表示法求最小值和最大值下标后,直接利用next数组求循环节即可(如果最小/大值在循环字符串里出现多次,那么此字符串就可以构成循环节,并且循环节长度小于字符串 阅读全文
posted @ 2021-01-01 09:21 acmloser 阅读(76) 评论(0) 推荐(0) 编辑
摘要: 原题链接 KMP+前后缀匹配 别人眼里的模板题我能做N个小时... 错解思路: 将所给的未转化完成的字符串全部转化为第二种状态(即未翻译的状态),和上题一样的思路,将原串和新串和空格拼接在一起求公共前后缀,再利用公共前后缀求剩下的还未被纳入第二部分的原串.如果这样写易错点是aaaaa(密码文里a-> 阅读全文
posted @ 2020-12-31 22:39 acmloser 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 原题链接 如果直接枚举字符串前缀的子串,再将子串赋值到一个新串,就会O(n^2)超时,因此必须考虑优化 正确思路: 通过观察规律,我们可以发现当出现前缀在字符串出现次数为1的时候,后面包括这个前缀的新串,在字符串的出现次数也为1,经此优化即可 思路2: 根据ne数组计数,当ne[i]!=0时,ans 阅读全文
posted @ 2020-12-31 17:50 acmloser 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 原题链接 KMP+字符串的运用 一开始计算错了时间复杂度,还以为可以直接暴力.... 错解思路: 求公共最长的前缀和后缀,如果直接将字符串拼接在一起,如果遇到这样的测试样例eg:s1 = aaa,s2 = aaa就会输出错误,所以我们必须分隔开s1和s2 正解思路: 我们不能让s2认为属于s1部分的 阅读全文
posted @ 2020-12-31 10:41 acmloser 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 原题链接 求后缀凑成循环串还差几个字符 KMP练习 从前面的无线传输我们已经懂了怎么利用KMP求循环串长度,这里我们从尾下标就可以判断末尾是循环串的第几个字符 但这里有多种情况,分类讨论即可 1 #include <iostream> 2 #include <cstdio> 3 #include < 阅读全文
posted @ 2020-12-30 23:45 acmloser 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 原题链接 翻译一下题目就是求主串里有多少个子串 数据很小,貌似暴力就能过.但写这道题主要是练习KMP 默写KMP模板,j回溯时不要ne[j]直接等于0即可 j = ne[j]是求重叠子串的本质 1 #include <bits/stdc++.h> 2 using namespace std; 3 c 阅读全文
posted @ 2020-12-30 23:42 acmloser 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察KMP的运用 错误思路: 我是求字符串中没有重合的最长前后缀,但这样的思路遇到cabc这样的测试数据显然是错误的,因为字符串复制时不一定会复制>=两遍 正解思路: 按上面的思路,如果字符串复制两遍及以上,那么j的最大值就是答案,如果字符串复制少于2遍,答案应该是公共前后缀的长度+没有公 阅读全文
posted @ 2020-12-30 13:07 acmloser 阅读(57) 评论(0) 推荐(0) 编辑