※ 引述 《JerryChungYC (JerryChung)》 之铭言:
:
: https://leetcode.com/problems/minimum-number-of-pushes-to-type-word-ii
:
: 3016. Minimum Number of Pushes to Type Word II
:
: 给一个字串 word
:
: 电话按键映射小写英文字母集合 透过按的次数获得字母
: 如 2 映射 ['a', 'b', 'c'] 按 1 次得到 a 按 2 次得到 b 按 3 次得到 c
: 现在将按键 2~9 重新对应到不同字母集合 每个键可以映射到任意数量的字母
: 找出输入字串所需的最少按键次数
: 注意 1, *, #, 0 不映射到任何字母
:
: Example 1:
: Input: word = "abcde"
: Output: 5
: Explanation: "a" ~ "e" 分别对应 key 2 ~ 6
: 合计 1 + 1 + 1 + 1 + 1 = 5
:
机掰
这题以前周赛出过
我写过
思路:
记数量
用的多的就拿去前面放
用的少的后面一点
笑死
我以前写超丑
class Solution {
public:
int minimumPushes(string word)
{
int letter[300] = {};
int most1[300] = {};
int most2[300] = {};
int most3[300] = {};
int most4[300] = {};
int len = word.size();
for(int i = 0 ; i < len ; i++)
{
letter[word[i]] ++;
}
int m = 0;
int mi = 0;
for(int i = 0 ; i < 8 ; i ++)
{
m=0;
mi=0;
for(int j = 0 ; j < 300 ; j ++)
{
if(letter[j] > m)
{
m = letter[j];
mi = j;
}
}
letter[mi] = 0;
most1[mi] = m;
}
for(int i = 0 ; i < 8 ; i ++)
{
m = 0;
mi=0;
for(int j = 0 ; j < 300 ; j ++)
{
if(letter[j] > m)
{
m = letter[j];
mi = j;
}
}
letter[mi] = 0;
most2[mi] = m;
}
for(int i = 0 ; i < 8 ; i ++)
{
m=0;
mi=0;
for(int j = 0 ; j < 300 ; j ++)
{
if(letter[j] > m)
{
m = letter[j];
mi = j;
}
}
letter[mi] = 0;
most3[mi] = m;
}
for(int i = 0 ; i < 8 ; i ++)
{
m=0;
mi=0;
for(int j = 0 ; j < 300 ; j ++)
{
if(letter[j] > m)
{
m = letter[j];
mi = j;
}
}
letter[mi] = 0;
most4[mi] = m;
}
int ans = 0;
for(int i = 1 ; i < 300 ; i ++)
{
// if(most1[i]!=0)printf("%d ",most1[i]);
ans += most1[i];
}
// printf("\n");
for(int i = 1 ; i < 300 ; i ++)
{
// if(most2[i]!=0)printf("%d ",most2[i]);
ans += most2[i] * 2;
}
// printf("\n");
for(int i = 1 ; i < 300 ; i ++)
{
// if(most3[i]!=0)printf("%d ",most3[i]);
ans += most3[i] * 3;
}
// printf("\n");
for(int i = 1 ; i < 300 ; i ++)
{
// if(most4[i]!=0)printf("%d ",most4[i]);
ans += most4[i] * 4;
}
// printf("\n");
// printf("========== \n");
return ans;
}
};