完美字串

brucehb發表於2017-05-13
約翰認為字串的完美度等於它裡面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應一個1-26之間的整數。
約翰不在乎字母大小寫。(也就是說字母F和f)的完美度相同。給定一個字串,輸出它的最大可能的完美度。例如:dad,你可以將26分配給d,25分配給a,這樣整個字串完美度為77。
Input
輸入一個字串S(S的長度 <= 10000),S中沒有除字母外的其他字元。
Output
由你將1-26分配給不同的字母,使得字串S的完美度最大,輸出這個完美度。
Input示例
dad
Output示例

77

#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;

int counter[26];
const int OFFSET = 'a' - 'A';

int fun(string &input)
{
    memset(counter, 0, sizeof(counter));
    int len = input.length();
    for (int i = 0; i < len; i++)
    {
        if (input[i] <= 'z' && input[i] >= 'a')
        {
            counter[input[i]-'a']++;
        }
        else if (input[i] <= 'Z' && input[i] >= 'A')
        {
            counter[input[i]-'A']++;
        }
    }
    
    sort(counter, counter+26);
 
    int num = 26;
    int result = 0;
    for (int i = 25; i >= 0; i--)
    {
        if (counter[i] == 0)
        {
            break;
        }
        else
        {
            result += counter[i] * num;
            num--;
        }
    }
    
    return result;
}

int main()
{
    string input;
    cin >> input;
    cout << fun(input) << endl;
    
	return 0;
}


相關文章