diff --git a/cs/minimum-number-of-pushes-to-type-word-ii.cs b/cs/minimum-number-of-pushes-to-type-word-ii.cs new file mode 100644 index 0000000..a6e8388 --- /dev/null +++ b/cs/minimum-number-of-pushes-to-type-word-ii.cs @@ -0,0 +1,33 @@ +public class Solution { + private int[] GetFreqs(string word) { + var freqs = new int[26]; + foreach (char c in word) { + ++freqs[c - 'a']; + } + return freqs; + } + + public int MinimumPushes(string word) { + // Count occurences of letters + var freqs = GetFreqs(word); + + // Sort them (letters don't matter, only counts) + Array.Sort(freqs); + + var pushes = 0; + + var (minPushes, used) = (1, 0); + for (var i = freqs.Length - 1; i >= 0 && freqs[i] > 0; --i) { + pushes += freqs[i] * minPushes; + ++used; + + // used all buttons for the current position + if (used >= 8) { + ++minPushes; + used = 0; + } + } + + return pushes; + } +}