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 == 7
color[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.