入門題 完美字串

2021-09-12 09:04:59 字數 1080 閱讀 2069

約翰認為字串的完美度等於它裡面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應乙個1-26之間的整數。

約翰不在乎字母大小寫。(也就是說字母f和f)的完美度相同。給定乙個字串,輸出它的最大可能的完美度。例如:dad,你可以將26分配給d,25分配給a,這樣整個字串完美度為77。

分析: 由排序不等式,出現次數最多的字母顯然應該給26。所以這個題目變成了統計每種字母出現的次數了,然後按照出現次數從大到小,依次分配從高到低的權值。這就是最樸素的貪心思想。

收起最後,我們來提供輸入輸出資料,由你來寫一段程式,實現這個演算法,只有寫出了正確的程式,才能繼續後面的課程。

輸入

輸入乙個字串s(s的長度 <= 10000),s中沒有除字母外的其他字元。
輸出

由你將1-26分配給不同的字母,使得字串s的完美度最大,輸出這個完美度。
輸入示例

dad

輸出示例

77
這個題目首先確定貪心策略————即出現字母最多的設定的值最大,然後在統計字元出現次數就可以了,統計字元次數是可以借助桶排序的思想。

還有一點,就是抓住問題的本質,主要是字元次數,無關字元本身是什麼,所以有了如下的排序。

**如下:

#include#include#include#include#include#include #include #include #include#include#include #include#include #define ll long long

using namespace std;

int ans[100000];

int main()

int i='a',j='z';int num=0;

sort(ans+i,ans+j+1,greater());//按出現次數從大到小排序

for(ll k=i,s=26;k<=j;k++,s--)

}cout<}

貪心入門 完美字串

約翰認為字串的完美度等於它裡面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應乙個1 26之間的整數。約翰不在乎字母大小寫。也就是說字母f和f 的完美度相同。給定乙個字串,輸出它的最大可能的完美度。例如 dad,你可以將26分配給d,25分配給a,這樣整個字串完美...

完美字串

約翰認為字串的完美度等於它裡面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應乙個1 26之間的整數。約翰不在乎字母大小寫。也就是說字母f和f 的完美度相同。給定乙個字串,輸出它的最大可能的完美度。例如 dad,你可以將26分配給d,25分配給a,這樣整個字串完美...

完美字串

約翰認為字串的完美度等於它裡面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應乙個1 26之間的整數。約翰不在乎字母大小寫 也就是說字母a和a的完美度相同 給定乙個字串,輸出它的最大可能的完美度。例如 dad,你可以將26分配給d,25分配給a,這樣整個字串完美度...