@@ -89,4 +89,149 @@ fun percentageLetter(s: String, letter: Char): Int {
89
89
}
90
90
91
91
92
+ /* *
93
+ * 1309. Decrypt String from Alphabet to Integer Mapping
94
+ */
95
+
96
+ fun freqAlphabets (s : String ): String {
97
+ val result = StringBuilder ()
98
+ var i = s.length - 1
99
+
100
+ while (i >= 0 ) {
101
+ if (s[i] == ' #' ) {
102
+ val twoDigit = s.substring(i - 2 , i).toInt()
103
+ result.append(getLetterFromIndex(twoDigit - 1 ))
104
+ i - = 3
105
+ } else {
106
+ result.append(getLetterFromIndex(s[i].digitToInt() - 1 ))
107
+ i - = 1
108
+ }
109
+ }
110
+
111
+ return result.reverse().toString()
112
+ }
113
+
114
+ fun getLetterFromIndex (index : Int ): Char {
115
+ require(index in 0 .. 25 ) { " Index must be between 0 and 25 (inclusive)" }
116
+ return ' a' + index
117
+ }
118
+
119
+
120
+ /* *
121
+ *
122
+ */
123
+
124
+ fun isNumber (s : String ): Boolean = when {
125
+ isOnlyNumbers(s) -> true
126
+ hasLetter(s) -> false
127
+ isValidNumberSign(s) && ! hasExponential(s) -> true
128
+ isNotValidNumberSign(s) -> false
129
+ else -> hasNumberExponential(s)
130
+ }
131
+
132
+ private fun hasNumberExponential (str : String ): Boolean {
133
+ var indexExp = 0
134
+ var isNotDigits = true
135
+ for (i in str.indices) {
136
+ if (isExponential(str[i])) {
137
+ indexExp = i
138
+ break
139
+ }
140
+ }
141
+
142
+ for (i in 0 until indexExp) {
143
+ if (isDigit(str[i])) isNotDigits = false
144
+ }
145
+
146
+ if (isNotDigits) return false
147
+ isNotDigits = true
148
+ for (i in indexExp until str.length) {
149
+ if (str[i] == ' .' ) return false
150
+ if (isDigit(str[i])) isNotDigits = false
151
+ }
152
+
153
+ return ! isNotDigits
154
+ }
155
+
156
+ private fun isValidNumberSign (str : String ): Boolean {
157
+ var isPlusOrMinus = false
158
+ var isOneDot = false
159
+ for (char in str) {
160
+ if (isSign(char)) {
161
+ if (isPlusOrMinus) return false
162
+ else isPlusOrMinus = true
163
+ }
164
+ if (isDot(char) && ! isOneDot) {
165
+ isOneDot = true
166
+ continue
167
+ }
168
+ if (isDot(char) && isOneDot) return false
169
+ }
170
+ return true
171
+ }
172
+
173
+ private fun hasExponential (str : String ): Boolean {
174
+ for (char in str) if (isExponential(char)) return true
175
+ return false
176
+ }
177
+
178
+ private fun isNotValidNumberSign (str : String ): Boolean {
179
+ var isPlusOrMinus = false
180
+ var isOneDot = false
181
+ for (char in str) {
182
+ if (isSign(char)) {
183
+ if (isPlusOrMinus) return true
184
+ else isPlusOrMinus = true
185
+ }
186
+ if (isDot(char) && ! isOneDot) {
187
+ isOneDot = true
188
+ continue
189
+ }
190
+ if (isOneDot) return true
191
+ }
192
+ return false
193
+ }
194
+
195
+ private fun hasLetter (str : String ): Boolean {
196
+ for (char in str) {
197
+ if (isLetter(char)) return true
198
+ }
199
+ return false
200
+ }
201
+
202
+ private fun isOnlyNumbers (str : String ): Boolean {
203
+ for (char in str) {
204
+ if (isLetter(char) || isExponential(char) || isSign(char) || isDot(char)) return false
205
+ }
206
+ return true
207
+ }
208
+
209
+ fun isDigit (char : Char ): Boolean = when {
210
+ char in ' 0' .. ' 9' -> true
211
+ else -> false
212
+ }
213
+
214
+ fun isLetter (char : Char ): Boolean = when {
215
+ (char != ' e' && char != ' E' ) && (char in ' a' .. ' z' || char in ' A' .. ' Z' ) -> true
216
+ else -> false
217
+ }
218
+
219
+ fun isExponential (char : Char ): Boolean = when {
220
+ char == ' e' || char == ' E' -> true
221
+ else -> false
222
+ }
223
+
224
+ fun isDot (char : Char ) = when {
225
+ char == ' .' -> true
226
+ else -> false
227
+ }
228
+
229
+ fun isSign (char : Char ): Boolean {
230
+ return when {
231
+ char == ' +' || char == ' -' -> true
232
+ else -> false
233
+ }
234
+ }
235
+
236
+
92
237
0 commit comments