题目大意:找出是否存在子串中俩相同字母之间是否存在相同字母(比如abbca,存在bbc不是平衡三元组,故输出NO)思路:双指针以减小时间复杂度
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
typedef long long ll;
const int N = 201000;
int t,len;
char s[N];
bool find(int x)
{
static int c[27]={0};
for(int i=1;i<=len;i++)
{
if (s[i] - 'a' == x) continue;
memset(c, 0, sizeof c);
int j=i;
c[s[i]-'a']++;
while(j<len&&s[j+1]-'a'!=x)
{
j++;
if(++c[s[j]-'a']>1) return false;
}
}
return true;
}
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
cin>>t;
while(t--)
{
int cnt[27]={0},ok=1;
cin>>s+1;
len=strlen(s+1);
for(int i=1;i<=len;i++) cnt[s[i]-'a']++;
for(int i=0;i<26;i++)
{
if(cnt[i])
if(!find(i))
{
ok=0;
break;
}
}
if(ok==1) printf("YES\n");
else printf("NO\n");
}
return 0;
}