A Perfectly Balanced String?

Let’s call a string s perfectly balanced if for all possible triplets (t,u,v) such that t is a non-empty substring of s and u and v are characters present in s, the difference between the frequencies of u and v in t is not more than 1.

For example, the strings “aba” and “abc” are perfectly balanced but “abb” is not because for the triplet (“bb”,‘a’,‘b’), the condition is not satisfied.

You are given a string s consisting of lowercase English letters only. Your task is to determine whether s is perfectly balanced or not.

A string b is called a substring of another string a if b can be obtained by deleting some characters (possibly 0) from the start and some characters (possibly 0) from the end of a.

Input
The first line of input contains a single integer t (1≤t≤2⋅104) denoting the number of testcases.

Each of the next t lines contain a single string s (1≤|s|≤2⋅105), consisting of lowercase English letters.

It is guaranteed that the sum of |s| over all testcases does not exceed 2⋅105.

Output
For each test case, print “YES” if s is a perfectly balanced string, and “NO” otherwise.

You may print each letter in any case (for example, “YES”, “Yes”, “yes”, “yEs” will all be recognized as positive answer).

Example
input

5
aba
abb
abc
aaaaa
abcba

output
YES
NO
YES
YES
NO

题意: 选取任意不为0的长度的子串,如果子串中出现有这个串中任意两个字母数量的差值>=2,则输出NO,否则输出YES

以下思路来自 这位dalao

思路:

定理: 定义s 中不同字符的个数为k ,长度为n ,如果对于任意的0<=i<n-k+1,长度为k 的子串s [ i , i + k − 1 ]上的字符都是不同的,则s 是平衡的。

必要性: 如果存在子串s [ i , i + k − 1 ] 的字符有相同的,则s 至少有一个字符v没出现在子串s [ i , i + k − 1 ] 上,不妨设s [ i , i + k − 1 ] 的相同字符为u ,则有count ( u ) − count ( v ) > = 2,因此s 是不平衡的。

充分性: 如果对于任意的0 < = i < n − k + 1,长度为k 的子串s [ i , i + k − 1 ] 上的字符都是不同的。对于任意的子串s [ i , i + l − 1 ],它可以拆分成⌈ l / k ⌉段,除了最后一段,每一段上任意字符的出现次数都是1。因此任意字符,在子串s [ i , i + l − 1 ] 的出现次数为⌈ l / k ⌉,或者⌈ l / k ⌉ − 1 ,因此,此时任意字符的在子串s [ i , i + l − 1 ] 的出现次数的差值的绝对值小于等于1。因此,s 是平衡的。

上述定理也可以转化为s 的前k 个字符不同,对于任意i > = k 的字符,要求
s i = = s i − k

AC代码:

#include<bits/stdc++.h>
using namespace std;
string a;
int main()
{ios::sync_with_stdio(0);cin.tie(0);int n,i,j,k;cin>>n;while(n--){cin>>a;set<char>s;for(i=0;i<a.size();i++)//统计不同字符的字串长度{if(s.find(a[i])==s.end())s.insert(a[i]);elsebreak;}k=s.size();for(i=k;i<a.size();i++)//遍历,如果有不相等的跳出{if(a[i]!=a[i-k])break;}if(i!=a.size())cout<<"NO\n";elsecout<<"YES\n";}return 0;}

A Perfectly Balanced String?(Codeforces Round #785 (Div. 2))相关推荐

  1. F. Bouncy Ball(Codeforces Round 859 (Div. 4))

    题目链接:Problem - F - Codeforceshttps://codeforces.com/contest/1807/problem/F 题意:给你一个n*m大小的网格,再给你一个起始点和 ...

  2. D. Boboniu Chats with Du(Codeforces Round #664 (Div. 2) )

    感受 怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间怎么这么傻逼的题目,我现场A不了呢?看来还有不少提升的空间 题意 简单来说,给 ...

  3. F. Strange Array(Codeforces Round #727 (Div. 2))(主席树)

    F. Strange Array 给定一个长度为nnn的数组aaa,1≤ai≤n1 \leq a_i \leq n1≤ai​≤n,对于每个aia_iai​,我们要找到一个l≤i,r≥il \leq i ...

  4. E. Company(Codeforces Round #520 (Div. 2))

    E. Company 给定一颗有nnn个节点的树,有mmm次询问,每次询问给定[l,r][l, r][l,r],我们可以选择删除其中的一个点ppp,然后找到一个深度最深的rtrtrt,使得剩下的点都在 ...

  5. D. Cut and Stick(Codeforces Round #716 (Div. 2))

    D. Cut and Stick 给定一个长度为nnn的数组,里面元素为a1,a2,a3,-,an−1,an,(1≤ai≤n)a_1, a_2, a_3, \dots, a_{n- 1}, a_n, ...

  6. Codeforces Round #777 (Div. 2) 简训

    Codeforces Round #777 (Div. 2) 简训 导语 涉及的知识点 题目 A Madoka and Math Dad B Madoka and the Elegant Gift C ...

  7. Codeforces Round #815 (Div. 2)

    Codeforces Round #815 (Div. 2) 传送门 :Codeforces Round #815 (Div. 2) 之前都是108键的键盘,最近在家用的68,两三天了还是非常不顺手, ...

  8. 「日常训练」Alternative Thinking(Codeforces Round #334 Div.2 C)

    题意与分析 (CodeForces - 603A) 这题真的做的我头疼的不得了,各种构造样例去分析性质... 题意是这样的:给出01字符串.可以在这个字符串中选择一个起点和一个终点使得这个连续区间内所 ...

  9. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

最新文章

  1. win10安装spacemacs
  2. python自学视频-python自学视频看这个就对了
  3. ios app提交之前需要哪几个证书
  4. MATLAB实战系列(十一)-多种群遗传算法的函数优化算法(附MATLAB代码)
  5. Uva 11600 期望DP
  6. HYSBZ - 1050(旅行comf 并查集Java实现)
  7. [react] react中setState的第二个参数作用是什么呢?
  8. LeetCode MySQL 1890. 2020年最后一次登录(year)
  9. 对比特币勒索病毒进行批量安装永恒之蓝补丁
  10. 快递查询小程序源码可运营+微信物流快递查询小程序
  11. python如何并发运行2个软件_如何利用并发性加速你的python程序(二):I/O 绑定程序加速...
  12. 在修改css特效时,需要注意的问题。(对寄存的影响,引用的位置)
  13. JVM GC调优一则--增大Eden Space提高性能
  14. 矩阵求导和矩阵迹求导
  15. android判断极光推送是不是注册成功,android极光推送用户怎么注册sdk
  16. eboot.php如何转成iso,如何转换成iso格式
  17. 真正的人工智能能实现吗_如何实现真正的人工智能
  18. 解密国内BAT等大厂前端技术体系-腾讯篇(长文建议收藏)
  19. 导出 Excel 表格
  20. HP M132snw 打印机如何在换路由器的时候更换整个局域网配置?

热门文章

  1. 数据采集(四):用XPath爬取链家网房价数据
  2. TCP/IP协议卷学习---基础部分(十五 TFTP)
  3. android surfaceview学习(一)
  4. TEPS and WAREHOUS 表什么时候创建?
  5. 各种快递查询Api接口(快递鸟)
  6. alter在MySQL中是什么意思_MySql之ALTER命令用法详细解读(转)
  7. FlaFly Flash播放器官方主页建成
  8. All In love
  9. 印度比中国可怕在哪里?一能力或成超越中国秘密武器
  10. C++ 编程之QueryInterface函数(一)