#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S chmin( S & a, T b) {
if ( a> b) {
a= b;
}
return a;
}
template < class S, class T> inline S chmax( S & a, T b) {
if ( a< b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int mn[ 128 ] ;
int mx[ 128 ] ;
class Solution{
public :
int maxLengthBetweenEqualCharacters( string s) {
int i;
int res = - 1 ;
int n = s.size ( ) ;
for ( i= ( 0 ) ; i< ( 128 ) ; i++ ) {
mn[ i] = 1073709056 ;
mx[ i] = - 1073709056 ;
}
;
for ( i= ( 0 ) ; i< ( n) ; i++ ) {
chmin( mn[ s[ i] ] , i) ;
}
for ( i= ( 0 ) ; i< ( n) ; i++ ) {
chmax( mx[ s[ i] ] , i) ;
}
for ( i= ( 0 ) ; i< ( 128 ) ; i++ ) {
chmax( res, mx[ i] - mn[ i] - 1 ) ;
}
return res;
}
}
;
// cLay varsion 20201018-2
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int mn[128], mx[128];
//
// class Solution {
// public:
// int maxLengthBetweenEqualCharacters(string s) {
// int res = -1, n = s.size();
// rep(i,128) mn[i] = int_inf, mx[i] = -int_inf;;
// rep(i,n) mn[s[i]] <?= i;
// rep(i,n) mx[s[i]] >?= i;
// rep(i,128) res >?= mx[i] - mn[i] - 1;
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIGNobWluKFMgJmEsIFQgYil7CiAgaWYoYT5iKXsKICAgIGE9YjsKICB9CiAgcmV0dXJuIGE7Cn0KdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIFMgY2htYXgoUyAmYSwgVCBiKXsKICBpZihhPGIpewogICAgYT1iOwogIH0KICByZXR1cm4gYTsKfQojZGVmaW5lIG1haW4gZHVtbXlfbWFpbgppbnQgbWFpbigpewogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmludCBtblsxMjhdOwppbnQgbXhbMTI4XTsKY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIGludCBtYXhMZW5ndGhCZXR3ZWVuRXF1YWxDaGFyYWN0ZXJzKHN0cmluZyBzKXsKICAgIGludCBpOwogICAgaW50IHJlcyA9IC0xOwogICAgaW50IG4gPSBzLnNpemUoKTsKICAgIGZvcihpPSgwKTtpPCgxMjgpO2krKyl7CiAgICAgIG1uW2ldID0gMTA3MzcwOTA1NjsKICAgICAgbXhbaV0gPSAtMTA3MzcwOTA1NjsKICAgIH0KICAgIDsKICAgIGZvcihpPSgwKTtpPChuKTtpKyspewogICAgICBjaG1pbihtbltzW2ldXSwgaSk7CiAgICB9CiAgICBmb3IoaT0oMCk7aTwobik7aSsrKXsKICAgICAgY2htYXgobXhbc1tpXV0sIGkpOwogICAgfQogICAgZm9yKGk9KDApO2k8KDEyOCk7aSsrKXsKICAgICAgY2htYXgocmVzLCBteFtpXSAtIG1uW2ldIC0gMSk7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDIwMTAxOC0yCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGludCBtblsxMjhdLCBteFsxMjhdOwovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgaW50IG1heExlbmd0aEJldHdlZW5FcXVhbENoYXJhY3RlcnMoc3RyaW5nIHMpIHsKLy8gICAgIGludCByZXMgPSAtMSwgbiA9IHMuc2l6ZSgpOwovLyAgICAgcmVwKGksMTI4KSBtbltpXSA9IGludF9pbmYsIG14W2ldID0gLWludF9pbmY7OwovLyAgICAgcmVwKGksbikgbW5bc1tpXV0gPD89IGk7Ci8vICAgICByZXAoaSxuKSBteFtzW2ldXSA+Pz0gaTsKLy8gICAgIHJlcChpLDEyOCkgcmVzID4/PSBteFtpXSAtIG1uW2ldIC0gMTsKLy8gICAgIHJldHVybiByZXM7Ci8vICAgfQovLyB9Owo=