华为机试,HJ127 小红的双生串

小红的双生串

https://www.nowcoder.com/practice/099d6681234d4e3e95c0e0ade31929da?tpId=37&tqId=43265&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D3%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

(改一下题目,双生串不限制只在中间位置分开,两边颜色各自统一,可以在任何位置分开)

可以用前缀和,时间复杂度:O(26*n) ,空间复杂度:O(26*n)

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+6;
int qsum[28][N],sum[28];
string s;
int main(){
    cin>>s;
    for(int i=0;i<s.size();i++){
        sum[s[i]-'a']++;
        for(int j=0;j<26;j++){
            if(s[i]-'a'==j) qsum[j][i+1]=qsum[j][i]+1;
            else qsum[j][i+1]=qsum[j][i];
        }
    } 
    // for(int i=0;i<26;i++){
    //     cout<<sum[i]<<" ";
    // }
    // cout<<endl;
    int ans=N;
    for(int i=0;i<s.size();i++){
        int mal=0,mar=0;
        for(int j=0;j<26;j++){
            mal=max(mal,qsum[j][i+1]);
            mar=max(mar,sum[j]-qsum[j][i+1]);
        }
        // cout<<mal<<" "<<mar<<endl;
        int x=s.size()-mal-mar;
        ans=min(ans,x);
    }
    cout<<ans;

    return 0;
}

}

全部评论

相关推荐

码农索隆:这种hr,建议全中国推广
点赞 评论 收藏
分享
05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务