Skip to content

Commit 075f00d

Browse files
committed
Add solution 423
1 parent 16f36c0 commit 075f00d

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

Diff for: 423_ReconstructOriginalDigitsFromEnglish.swift

+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
class Solution {
2+
func originalDigits(_ s: String) -> String {
3+
let letters:[Character:Int] = [
4+
"z":0,
5+
"x":6,
6+
"w":2,
7+
"u":4,
8+
"g":8,
9+
"t":3,
10+
"f":5,
11+
"s":7,
12+
"o":1,
13+
"n":9]
14+
15+
var map = [Character: Int]()
16+
var result = [Int]()
17+
for c in s {
18+
map[c] = (map[c] ?? 0) + 1
19+
}
20+
for letter in "zxwugtfso" {
21+
if let count = map[letter] {
22+
reduceWords(letter, count, &map)
23+
result += Array(repeating:letters[letter]!, count:count)
24+
}
25+
}
26+
27+
if let count = map["e"] {
28+
result.append(contentsOf: Array(repeating:9, count:count))
29+
}
30+
31+
var returnValue = ""
32+
for i in result.sorted() {
33+
returnValue += "\(i)"
34+
}
35+
return returnValue
36+
}
37+
38+
func reduceWords(_ letter: Character, _ n:Int, _ map: inout [Character:Int]) {
39+
switch letter {
40+
case "z"://zero
41+
reduceLetters("z", n, &map)
42+
reduceLetters("e", n, &map)
43+
reduceLetters("r", n, &map)
44+
reduceLetters("o", n, &map)
45+
case "x"://six
46+
reduceLetters("s", n, &map)
47+
reduceLetters("i", n, &map)
48+
reduceLetters("x", n, &map)
49+
case "w":
50+
reduceLetters("t", n, &map)
51+
reduceLetters("w", n, &map)
52+
reduceLetters("o", n, &map)
53+
case "u":
54+
reduceLetters("f", n, &map)
55+
reduceLetters("o", n, &map)
56+
reduceLetters("u", n, &map)
57+
reduceLetters("r", n, &map)
58+
case "g":
59+
reduceLetters("e", n, &map)
60+
reduceLetters("i", n, &map)
61+
reduceLetters("g", n, &map)
62+
reduceLetters("h", n, &map)
63+
reduceLetters("t", n, &map)
64+
case "t":
65+
reduceLetters("t", n, &map)
66+
reduceLetters("h", n, &map)
67+
reduceLetters("r", n, &map)
68+
reduceLetters("e", n*2, &map)
69+
case "f":
70+
reduceLetters("f", n, &map)
71+
reduceLetters("i", n, &map)
72+
reduceLetters("v", n, &map)
73+
reduceLetters("e", n, &map)
74+
case "s":
75+
reduceLetters("s", n, &map)
76+
reduceLetters("e", n*2, &map)
77+
reduceLetters("v", n, &map)
78+
reduceLetters("n", n, &map)
79+
case "o":
80+
reduceLetters("o", n, &map)
81+
reduceLetters("n", n, &map)
82+
reduceLetters("e", n, &map)
83+
default:
84+
return
85+
}
86+
87+
}
88+
89+
func reduceLetters(_ letter: Character, _ n:Int, _ map: inout [Character: Int]) {
90+
if let count = map[letter] {
91+
map[letter] = count-n
92+
}
93+
}
94+
}
95+
96+

0 commit comments

Comments
 (0)