Thursday, January 28, 2021

[LeetCode] Smallest String With A Given Numeric Value

Problem: The numeric value of a lowercase character is defined as its position (1-indexed) in the alphabet, so the numeric value of a is 1, the numeric value of b is 2, the numeric value of c is 3, and so on.

The numeric value of a string consisting of lowercase characters is defined as the sum of its characters' numeric values. For example, the numeric value of the string "abe" is equal to 1 + 2 + 5 = 8.

You are given two integers n and k. Return the lexicographically smallest string with length equal to n and numeric value equal to k.

Note that a string x is lexicographically smaller than string y if x comes before y in dictionary order, that is, either x is a prefix of y, or if i is the first position such that x[i] != y[i], then x[i] comes before y[i] in alphabetic order.

Example:

Input: n = 3, k = 27
Output: "aay"
Explanation: The numeric value of the string is 1 + 1 + 25 = 27, and it is the smallest string with such a value and length equal to 3.
Input: n = 5, k = 73
Output: "aaszz"


Approach: To get the smallest string we know that we need to have as small values as possible in the beginning of the string. For example, for n = 3 and k = 27, "aay" and "abx" both are valid string but "aay" is smallest because it has "aa" in the begining.

With the above thought, we can come up with a greedy approach where we will put the maximum value possible at the end. That's all about the approach.

 

Implementation in C#:

        public static string GetSmallestString(int n, int k)

        {

            char[] result = new char[n];

            Array.Fill(result, 'a'); // We have the smallest string possible

            k -= n;

            while(k != 0)

            {

                int value = Math.Min(k, 25); // Maximum possible

                result[--n] += (char)value;

                k -= value;

            }

            return new string(result);

        }


Complexity: O(n)

No comments:

Post a Comment