题目描述
对于回文子序列就是可以不连续的 他有一个特征就是相同的元素他们之间中间至少有一个元素
我们可以用哈希去记录我们每个元素首次出现的位置 之后一旦遍历到某个元素判断这个元素记录过 即看是否他们之间的距离是大于2的
C++ 代码
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int N =5e3+10;
int a[N];
int main()
{
int T;
cin>>T;
while(T--)
{
unordered_map<int,int> map;
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
bool ok=false;
for(int i=0;i<n;i++)
{
if(!map.count(a[i])) map[a[i]]=i;
if(map.count(a[i])&&i-map[a[i]]>=2)
{
ok=true;
break;
}
}
if(ok) puts("YES");
else puts("NO");
}
return 0;
}