CF-Round#627-div3-B题
B. Yet Another Palindrome Problem
字符串处理问题
题目意思就是问你给你的一个序列当中找出长度大于等于三的子序列(注意是子序列)不是子串的回文序列。
如果有就输出yes,没有就输出no
map容易简单解决的问题。
统计每个数字出现的次数。如果一个数字出现次数到达三次那个就有回文序列。如果一个数字出现两次并且当前索引位置的值不等于前一个位置的值。那么也可以找到符合要求的序列。其余情况没有。
时间复杂度O(n)
代码部分:
#include <bits/stdc++.h>
using namespace std;
const int N = 5e3 + 10;
map<int, int> m;
int a[N];
int main()
{
int t;
cin >> t;
while (t--)
{
m.clear();
int n;
int flag = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
scanf ("%d", &a[i]);
m[a[i]]++;
if (m[a[i]] == 3)
{
flag = 1;
}
else if (m[a[i]] == 2 && a[i] != a[i - 1])
{
flag = 1;
}
}
flag ? cout << "YES\n" : cout << "NO\n";
}
return 0;
}