cf_题解–A. Do Not Be Distracted! Jul/18/2021
题意:输入一串字符 若不连续的字符 出现了第二次则输出NO 否则为YES
思想:
开一个bool数组记录此字符的出现与否 若遇到第二次 不连续的字符 判断是否出现过即可;
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
bool str[52];
string s;
void judge()
{
memset(str, 0, sizeof str);
str[s[0]-'0'] = true;
for (int i = 1; i < s.size(); i++)
{
if (s[i - 1] != s[i])
{
if (str[s[i]-'0']) { cout << "NO" << '\n'; return; }
str[s[i]-'0'] = true;
}
}
cout << "YES" << '\n';
}
int main()
{
cin.tie(nullptr)->sync_with_stdio(false);
int t; cin >> t;
while (t--)
{
int n; cin >> n;
cin >> s;
judge();
}
return 0;
}
或者:
将第一次出现的字符存起来 如果出现不连续的字符 则遍历存起来的数组 看原来是否有 有则NO 无则 加进去 然后走到最后
#include<iostream>
#include<cstring>
using namespace std;
char a[60], h[60];
int t, n, idx;
void judge()
{
h[idx++] = a[0];
for (int i = 0; i < n; i++)
{
if (a[i] != a[i + 1])
{
for (int j = 0; j < idx; j++)
if (a[i + 1] == h[j]) { cout << "No" << endl; memset(a, '\0', sizeof a); idx = 0; return; }
h[idx++] = a[i + 1];
}
}
cout << "Yes" << endl;
memset(a, '\0', sizeof a); idx = 0;
}
int main()
{
cin >> t;
while (t--)
{
cin >> n;
cin >> a;
judge();
}
return 0;
}