zoukankan      html  css  js  c++  java
  • R

    思路对了,但是不会写。

    等差数列长度不是1就是2,所以不是一个字母就是俩字母,一开始写的时候直接枚举两个字母,然后让次数相乘。这样是不对的,比如abaabb,字母ab的个数应该是3+2+2,因该是每一个a后边b的个数然后相加。

    正解:维护一个二位数组dp[i][j],表示位置后边,字符j的个数,然后枚举两个字符k和j,当位置i是字符k时,直接相加,当长度为1时,答案为x*(x-1)/2

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll N=1E5+7;
    ll dp[N][30];
    ll mp[30];
    ll arr[30];
    int main(){
        string s;
        cin>>s;
        ll n=s.size();
        ll ans=0;
        for(ll i=0;i<n;i++) {
            mp[s[i]-'a']++;
            ans=max(ans,mp[s[i]-'a']);
        }
        ans=max(ans,(ans-1)*ans/2);
        for(ll i=0;i<n;i++){
            arr[s[i]-'a']++;
            for(ll j=0;j<26;j++){
                dp[i][j]=mp[j]-arr[j];
            }
        }
        for(ll i=0;i<26;i++){
            for(ll j=0;j<26;j++){
                if(i==j) continue;
                ll tmp=0;
                for(ll k=0;k<n;k++){
                    if(s[k]==i+'a'){
                        tmp+=dp[k][j];
                    }
                }
                ans=max(ans,tmp);
            }
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    浅谈模块化开发
    用gulp搭建并发布自己的cli脚手架
    取值运算符新用法
    vue双向绑定之简易版
    获取对象属性之括号方式
    前端格式化工具之Prettier
    git操作之摘樱桃
    Sort
    MongoDB
    项目使用本地的包
  • 原文地址:https://www.cnblogs.com/Accepting/p/12344843.html
Copyright © 2011-2022 走看看