CF1324B Yet Another Palindrome Problem 题解
原题链接 CF 127个测试点,好评 简要题意: 多组数据,问数组中是否有长度 \(\geq 3\) 的回文子序列。 我们需要找到本质。 题目不让我们求这个长度,只让我们判断,这是为什么呢? 如果答案是 YES ,那么必然存在一个长度为 \(3\) 的回文子序列。否则为 NO . 你想,如果原数组的最长回文序列是奇数的话,只要每次在两边同时删去一个,就可以得到长度为 \(3\) 的回文子序列。 如果是偶数,只要每次在两边同时删去一个,再在最中间两个任意删去一个,也可以得到长度为 \(3\) 的回文子序列。 反之如果没有,则就没有了。 比方说: 10 1 2 3 4 2 1 4 2 4 3 你发现这个数组的最长回文子序列为: 3 4 2 2 4 3 是偶数,那么其中必然存在一个长度为 \(3\) 的是: 4 2 4 (当然不止一种) 所以,题意改为: 判断一个数组中是否有长度为 \(3\) 的回文子序列。 ???这还用判断吗??? 长度为 \(3\) ,中间数没有什么限制,旁边两个数相等即可。 也就是说,需要 找到两个相等的数,使得它们不相邻(即中间还放得下一个数,构成回文子序列) 。 ???这还用判断吗??? 显然,一波哈希解决问题。正好 \(a_i \leq n\) ,这不是天赐良机? 时间复杂度: \(O(T \times n)\) . 空间复杂度: \(O(n)\) .