code: 

#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
#include <cstring>
#define N 1000005
#define inf 10000008
#define ll long long
using namespace std;
namespace IO {
    void setIO(string s)
    {
        string in=s+".in";
        string out=s+".out";
        freopen(in.c_str(),"r",stdin);
        // freopen(out.c_str(),"w",stdout);
    }
};
int n;
int sum[N];
char str[N];
int main()
{
    IO::setIO("input");
    int i,j,ans=0;
    scanf("%d%s",&n,str+1);
    for(i=1;i<=n;++i) G[str[i]-'a'].push_back(i);
    for(i=0;i<26;++i)
    {
        if(G[i].size())
        {
            j=1;
            for(int k=0;k<G[i].size();++k)
            {
                while(j<G[i][k])  sum[j]=sum[j-1],++j;
                ++sum[j];
            }
            for(int k=0;k<26;++k)
            {
                if(k==i||!G[k].size()) continue;
                G[k].push_back(n+1);
                int d=inf,pre=0;
                for(int p=0;p<G[k].size()-1;++p)     // 枚举每个位置
                {
                    ++pre;
                    d=min(d,sum[G[k][p]]-pre);       // 前缀最小值.
                    ans=max(ans, sum[G[k][p+1]-1]-pre-d);
                }
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}

  

12-23 23:01