Problem
The red-green-blue color "#AABBCC" can be written as "#ABC" in shorthand.
- For example,
"#15c"is shorthand for the color"#1155cc".
The similarity between the two colors "#ABCDEF" and "#UVWXYZ" is -(AB -UV)2 - (CD - WX)2 - (EF - YZ)2.
Given a string color that follows the format "#ABCDEF", return a string represents the color that is most similar to the given color and has a shorthand (i.e., it can be represented as some "#XYZ").
Any answer which has the same highest similarity as the best answer will be accepted.
Examples
Example 1:
| |
Example 2:
| |
Constraints:
color.length == 7color[0] == '#'color[i]is either digit or character in the range['a', 'f']fori > 0.
Solution
Method 1 – Brute Force Over Shorthand Candidates
Intuition
For each color component (RR, GG, BB), the closest shorthand is of the form “xx” (where x is a hex digit), i.e., 0x11, 0x22, …, 0xFF. For each component, find the shorthand value closest to the original.
Approach
- For each component (RR, GG, BB), parse the two hex digits.
- For each, find the closest value of the form x*17 (i.e., 0x00, 0x11, …, 0xFF).
- Build the result string as “#XXYYZZ” where each pair is the closest shorthand.
Code
| |
| |
| |
Complexity
- ⏰ Time complexity:
O(1)— Only a few fixed computations. - 🧺 Space complexity:
O(1)— No extra space used.