B. A Perfectly Balanced String?
解题思路:
题意是要保证所有在字符串s中出现过的字符在其子串中出现次数的差值不大于1。所以只要保证两个一样的字符之前包含所有在s中出现过的字符(也就是长度要大于zong)。 要是中间重复了,后面会检查出来。
解题代码
#include<bits/stdc++.h>
using namespace std;
vector<int>v[26];//记录某个字符出现过的位置
void deal(int zong){
for(int i=0;i<26;i++){
int k=v[i].size();
for(int j=1;j<k;j++){
if(v[i][j]-v[i][j-1]<zong){
cout<<"NO\n";
return ;
}
}
}
cout<<"YES\n";
return;
}
int main(){
int T;
cin>>T;
while(T--){
string s;
cin>>s;
for(int i=0;i<26;i++) v[i].clear();//清零
int cnt[26]={0},zong=0;
for(int i=0;i<s.size();i++){
if(!cnt[s[i]-'a']) zong++;//统计总共出现了几个不同的字符
cnt[s[i]-'a']=1;
v[s[i]-'a'].push_back(i);
}
deal(zong);
}
return 0;
}