0
点赞
收藏
分享

微信扫一扫

字节笔试统计字符串中字符得分

12a597c01003 2022-03-14 阅读 187

题目

                小红拿到了仅有小写字母构成的字符串,她有一个按钮可以生成字母,按一下得到“a”,按两下得到“b”,按三下得到“c”;现在给他一个字符串和允许按按钮的次数,她通过按按钮来得到字符,每个字符记一分,请问他最大的得分,注意每个字符只能用一次(即"abaa“,5,她只能选3个a,或者2个a一个b,不过肯定是前面)

思路

                肯定是先按a再按b,这样的流程吗,因为每个字符都是一分,(就相当于你去买东西,大家的商品都一样,a要一块钱一件,b要2块,c要三块,d要四块)

                想到这儿,思路就出来了,循环26次,统计每个字符的数量,同时判断需要的次数在不在范围内,以及累加得到的分数

#include<iostream>
#include<algorithm>
#include<string>

using namespace std;

int main(){
    int n,k;
    cin >> n >> k;
    
    string s;
    cin >> s;


// 主体代码
    char ch = 'a';
    int ans = 0;
    for (int i = 0; i < 26;++i){
        int num = count(s.begin(), s.end(), char(ch+i));
        if (num==0){
            continue;
        }
        if (num*(i+1)<= k){
            ans = ans + num;
            k = k - num * (i + 1);
        }else{
            ans = ans + k / (i + 1);
            break;
        }
    }
    cout << ans << endl;
    getchar();
    return 0;
}

                复杂度为26*O(log n) count 函数是O(log n )。count函数的复杂度是线性的,最坏情况是O(n)

举报

相关推荐

0 条评论