将一类字符变成0或者1,问是否能构造出0,1,0,或者1,0,1这种交互的字符串。
直接模拟即可,从左向右扫描一遍,遇见没有碰见过的字符标记成0,或者1,与前面异或即可,发生冲突直接返回NO
#include<bits/stdc++.h>
using namespace std;
void solve()
{
int n;cin>>n;
string s;cin>>s;
map<char,int> b;
b[s[0]]=1;
for(int i=1;i<n;i++)
{
if(b[s[i]]==0)
{
if(b[s[i-1]]==1) b[s[i]]=2;
if(b[s[i-1]]==2) b[s[i]]=1;
}
if(b[s[i]]==1)
{
if(b[s[i-1]]==1)
{
cout<<"NO"<<endl;
return ;
}
}
if(b[s[i]]==2)
{
if(b[s[i-1]]==2)
{
cout<<"NO"<<endl;
return ;
}
}
}
cout<<"YES"<<endl;
}
int main()
{
int T=1;cin>>T;
while(T--) solve();
return 0;
}