Census clerks filed surnames by how they sound, so that Robert and Rupert land in the same
drawer. Given name, return its four-character sound code.
First ignore every character that is not a letter, and ignore case. If no letters remain, return
"". Letters belong to these groups:
- group
1:b f p v - group
2:c g j k q s x z - group
3:d t - group
4:l - group
5:m n - group
6:r - vowels:
a e i o u y - silent:
h w
- The code starts with the first letter, in upper case.
- Go through the remaining letters in order. A group letter adds its digit, unless the last group seen (see rule 3) is the same group; then it adds nothing.
- The "last group seen" starts as the group of the first letter (if it has one). Every group
letter sets it. A vowel clears it, so the same digit may appear again after a vowel. A
silent letter changes nothing: two letters of one group with only
horwbetween them add a single digit. - Stop once the code has four characters; if it is shorter, add
0s at the end.
Examples
Input: name = "Ashcraft"
Output: "A261"
Explanation: s -> 2, h is silent, c is group 2 again (skipped), r -> 6, a clears, f -> 1.
Input: name = "Pfister"
Output: "P236"
Explanation: f is in P's own group, so it adds nothing.
Input: name = "O'Hara"
Output: "O600"
Constraints
0 <= len(name) <= 100;nameholds ASCII letters, spaces, hyphens and apostrophes
Goals
- Translate letters to digit groups with a lookup
- Track the previous code carefully when some letters separate and others do not
- Pad or cut the result to a fixed length