using
System;
using
System.Collections.Generic;
class
GFG {
static
int
balanceString(
string
str)
{
int
N = str.Length;
if
(N == 0) {
return
0;
}
Dictionary<
char
,
int
> strFreq
=
new
Dictionary<
char
,
int
>();
foreach
(
char
c
in
str.ToCharArray())
{
if
(strFreq.ContainsKey(c))
strFreq += 1;
else
strFreq = 1;
}
Dictionary<
char
,
int
> extraChars
=
new
Dictionary<
char
,
int
>();
foreach
(KeyValuePair<
char
,
int
> c
in
strFreq)
{
if
(c.Value > N / 3)
extraChars = c.Value - N / 3;
}
if
(extraChars.Count == 0) {
return
0;
}
int
i = 0, j = 0;
int
minWindowLength = N + 1;
int
count = extraChars.Count;
while
(j < N) {
char
c = str[j];
if
(extraChars.ContainsKey(c)) {
extraChars -= 1;
if
(extraChars == 0)
count--;
}
if
(count == 0) {
while
(i < N && count == 0) {
minWindowLength = Math.Min(
minWindowLength, j - i + 1);
if
(extraChars.ContainsKey(str[i])) {
extraChars[str[i]] += 1;
if
(extraChars[str[i]] == 1)
count++;
}
i++;
}
}
j++;
}
return
minWindowLength;
}
public
static
void
Main()
{
string
str =
"ABCBBB"
;
Console.WriteLine(balanceString(str));
}
}