#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S max_L( S a,T b) {
return a>= b? a: b;
}
template < class S, class T> inline S chmin( S & a, T b) {
if ( a> b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
int balancedString( string s) {
int i;
int j;
int res;
int cnv[ 256 ] ;
int cnt[ 4 ] ;
int N = s.size ( ) ;
cnv[ 'Q' ] = 0 ;
cnv[ 'W' ] = 1 ;
cnv[ 'E' ] = 2 ;
cnv[ 'R' ] = 3 ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
s[ i] = cnv[ s[ i] ] ;
}
for ( i= ( 0 ) ; i< ( 4 ) ; i++ ) {
cnt[ i] = - ( N/ 4 ) ;
}
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
cnt[ s[ i] ] ++ ;
}
res = N;
j = 0 ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
int Lj4PdHRW;
int KL2GvlyY;
if ( 4 == 0 ) {
KL2GvlyY = 0 ;
}
else {
KL2GvlyY = cnt[ 0 ] ;
for ( Lj4PdHRW= ( 1 ) ; Lj4PdHRW< ( 4 ) ; Lj4PdHRW++ ) {
KL2GvlyY = max_L( KL2GvlyY, cnt[ Lj4PdHRW] ) ;
}
}
while ( j < i || ( j < N && KL2GvlyY> 0 ) ) {
int Q5VJL1cS;
int e98WHCEY;
if ( 4 == 0 ) {
e98WHCEY = 0 ;
}
else {
e98WHCEY = cnt[ 0 ] ;
for ( Q5VJL1cS= ( 1 ) ; Q5VJL1cS< ( 4 ) ; Q5VJL1cS++ ) {
e98WHCEY = max_L( e98WHCEY, cnt[ Q5VJL1cS] ) ;
}
}
if ( e98WHCEY<= 0 ) {
break ;
}
cnt[ s[ j++ ] ] -- ;
}
int cTE1_r3A;
int RZTsC2BF;
if ( 4 == 0 ) {
RZTsC2BF = 0 ;
}
else {
RZTsC2BF = cnt[ 0 ] ;
for ( cTE1_r3A= ( 1 ) ; cTE1_r3A< ( 4 ) ; cTE1_r3A++ ) {
RZTsC2BF = max_L( RZTsC2BF, cnt[ cTE1_r3A] ) ;
}
}
if ( RZTsC2BF> 0 ) {
break ;
}
chmin( res, j - i) ;
cnt[ s[ i] ] ++ ;
}
return res;
}
}
;
// cLay varsion 20191102-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// int balancedString(string s) {
// int i, j, res;
// int cnv[256], cnt[4];
// int N = s.size();
//
// cnv['Q'] = 0;
// cnv['W'] = 1;
// cnv['E'] = 2;
// cnv['R'] = 3;
// rep(i,N) s[i] = cnv[s[i]];
//
// rep(i,4) cnt[i] = -(N/4);
// rep(i,N) cnt[s[i]]++;
// res = N;
// j = 0;
// rep(i,N){
// while(j < i || (j < N && max(cnt(4)) > 0)){
// if(max(cnt(4)) <= 0) break;
// cnt[s[j++]]--;
// }
// if(max(cnt(4)) > 0) break;
// res <?= j - i;
// cnt[s[i]]++;
// }
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIG1heF9MKFMgYSxUIGIpewogIHJldHVybiBhPj1iP2E6YjsKfQp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBUPiBpbmxpbmUgUyBjaG1pbihTICZhLCBUIGIpewogIGlmKGE+Yil7CiAgICBhPWI7CiAgfQogIHJldHVybiBhOwp9CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIGludCBiYWxhbmNlZFN0cmluZyhzdHJpbmcgcyl7CiAgICBpbnQgaTsKICAgIGludCBqOwogICAgaW50IHJlczsKICAgIGludCBjbnZbMjU2XTsKICAgIGludCBjbnRbNF07CiAgICBpbnQgTiA9IHMuc2l6ZSgpOwogICAgY252WydRJ10gPSAwOwogICAgY252WydXJ10gPSAxOwogICAgY252WydFJ10gPSAyOwogICAgY252WydSJ10gPSAzOwogICAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICAgIHNbaV0gPSBjbnZbc1tpXV07CiAgICB9CiAgICBmb3IoaT0oMCk7aTwoNCk7aSsrKXsKICAgICAgY250W2ldID0gLShOLzQpOwogICAgfQogICAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICAgIGNudFtzW2ldXSsrOwogICAgfQogICAgcmVzID0gTjsKICAgIGogPSAwOwogICAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICAgIGludCBMajRQZEhSVzsKICAgICAgaW50IEtMMkd2bHlZOwogICAgICBpZig0PT0wKXsKICAgICAgICBLTDJHdmx5WSA9IDA7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgICBLTDJHdmx5WSA9IGNudFswXTsKICAgICAgICBmb3IoTGo0UGRIUlc9KDEpO0xqNFBkSFJXPCg0KTtMajRQZEhSVysrKXsKICAgICAgICAgIEtMMkd2bHlZID0gbWF4X0woS0wyR3ZseVksIGNudFtMajRQZEhSV10pOwogICAgICAgIH0KICAgICAgfQogICAgICB3aGlsZShqIDwgaSB8fCAoaiA8IE4gJiZLTDJHdmx5WT4gMCkpewogICAgICAgIGludCBRNVZKTDFjUzsKICAgICAgICBpbnQgZTk4V0hDRVk7CiAgICAgICAgaWYoND09MCl7CiAgICAgICAgICBlOThXSENFWSA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICBlOThXSENFWSA9IGNudFswXTsKICAgICAgICAgIGZvcihRNVZKTDFjUz0oMSk7UTVWSkwxY1M8KDQpO1E1VkpMMWNTKyspewogICAgICAgICAgICBlOThXSENFWSA9IG1heF9MKGU5OFdIQ0VZLCBjbnRbUTVWSkwxY1NdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoZTk4V0hDRVk8PSAwKXsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjbnRbc1tqKytdXS0tOwogICAgICB9CiAgICAgIGludCBjVEUxX3IzQTsKICAgICAgaW50IFJaVHNDMkJGOwogICAgICBpZig0PT0wKXsKICAgICAgICBSWlRzQzJCRiA9IDA7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgICBSWlRzQzJCRiA9IGNudFswXTsKICAgICAgICBmb3IoY1RFMV9yM0E9KDEpO2NURTFfcjNBPCg0KTtjVEUxX3IzQSsrKXsKICAgICAgICAgIFJaVHNDMkJGID0gbWF4X0woUlpUc0MyQkYsIGNudFtjVEUxX3IzQV0pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZihSWlRzQzJCRj4gMCl7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2htaW4ocmVzLCBqIC0gaSk7CiAgICAgIGNudFtzW2ldXSsrOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9Cn0KOwovLyBjTGF5IHZhcnNpb24gMjAxOTExMDItMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBpbnQgYmFsYW5jZWRTdHJpbmcoc3RyaW5nIHMpIHsKLy8gICAgIGludCBpLCBqLCByZXM7Ci8vICAgICBpbnQgY252WzI1Nl0sIGNudFs0XTsKLy8gICAgIGludCBOID0gcy5zaXplKCk7Ci8vIAovLyAgICAgY252WydRJ10gPSAwOwovLyAgICAgY252WydXJ10gPSAxOwovLyAgICAgY252WydFJ10gPSAyOwovLyAgICAgY252WydSJ10gPSAzOwovLyAgICAgcmVwKGksTikgc1tpXSA9IGNudltzW2ldXTsKLy8gCi8vICAgICByZXAoaSw0KSBjbnRbaV0gPSAtKE4vNCk7Ci8vICAgICByZXAoaSxOKSBjbnRbc1tpXV0rKzsKLy8gICAgIHJlcyA9IE47Ci8vICAgICBqID0gMDsKLy8gICAgIHJlcChpLE4pewovLyAgICAgICB3aGlsZShqIDwgaSB8fCAoaiA8IE4gJiYgbWF4KGNudCg0KSkgPiAwKSl7Ci8vICAgICAgICAgaWYobWF4KGNudCg0KSkgPD0gMCkgYnJlYWs7Ci8vICAgICAgICAgY250W3NbaisrXV0tLTsKLy8gICAgICAgfQovLyAgICAgICBpZihtYXgoY250KDQpKSA+IDApIGJyZWFrOwovLyAgICAgICByZXMgPD89IGogLSBpOwovLyAgICAgICBjbnRbc1tpXV0rKzsKLy8gICAgIH0KLy8gICAgIHJldHVybiByZXM7Ci8vICAgfQovLyB9Owo=