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;
}