• Source
    1. /**************************************************************
    2.   Problem: 2213
    3.   User: zrts
    4.   Language: C++
    5.   Result: Accepted
    6.   Time:2364 ms
    7.   Memory:1788 kb
    8. ****************************************************************/
    9.  
    10. #include <cstdio>
    11. #include <cstring>
    12. #include <algorithm>
    13. // by zrt
    14. // problem:
    15. // 无论你在什么时候开始,重要的是开始以后就不要停止。
    16. using namespace std ;
    17. typedef long long ll ;
    18. const double eps(1e-10) ;
    19. const int inf(0x7fffffff) ;
    20. #define N 1000000
    21. int n;char s[N];
    22. int ans;
    23. int tmp[26][26];
    24. int tmp2[26][26];
    25. int main(){
    26. #ifdef LOCAL
    27. freopen("in.txt","r",stdin) ;
    28. freopen("out.txt","w",stdout) ;
    29. #endif
    30. scanf("%d%s",&n,s);
    31. for(int i=0;i<n;i++) s[i]-='a';
    32. /*
    33.   int tmp,tmp2;
    34.   for(int i=0;i<26;i++){
    35.   for(int j=0;j<26;j++){
    36.   tmp2=0;
    37.   tmp=-inf;
    38.   if(i==j) continue;
    39.   for(int k=0;k<n;k++){
    40.   if(s[k]==i) {
    41.   tmp2++,tmp++;
    42.   if(tmp>ans) ans=tmp;
    43.   }else if(s[k]==j) {
    44.   tmp2--,tmp=tmp2;
    45.   if(tmp2<0) tmp2=0;
    46.   }
    47.   }
    48.   }
    49.   }*/
    50. memset(tmp,128,sizeof tmp);
    51. for(int k=0;k<n;k++){
    52. //1. s[k]==i
    53. for(int j=0;j<26;j++){
    54. if(j==s[k]) continue;
    55. tmp2[s[k]][j]++;tmp[s[k]][j]++;
    56. if(tmp[s[k]][j]>ans) ans=tmp[s[k]][j];
    57. }
    58.  
    59. //2. s[k]==j
    60. for(int i=0;i<26;i++){
    61. if(i==s[k]) continue;
    62. tmp2[i][s[k]]--,tmp[i][s[k]]=tmp2[i][s[k]];
    63. if(tmp[i][s[k]]>ans) ans=tmp[i][s[k]];
    64. if(tmp2[i][s[k]]<0) tmp2[i][s[k]]=0;
    65. }
    66. }
    67. printf("%d\n",ans);
    68. return 0 ;
    69. }