Skip to content

Commit e725d67

Browse files
authored
Improved tasks 620, 1309, 1392
1 parent 3979e46 commit e725d67

File tree

5 files changed

+45
-62
lines changed

5 files changed

+45
-62
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ implementation 'com.github.javadev:leetcode-in-kotlin:1.36'
498498
| <!-- --> | <!-- --> | <!-- --> | <!-- --> | <!-- --> | <!-- -->
499499
|-|-|-|-|-|-
500500
| 0709 |[To Lower Case](src/main/kotlin/g0701_0800/s0709_to_lower_case/Solution.kt)| Easy | String | 142 | 98.68
501-
| 1309 |[Decrypt String from Alphabet to Integer Mapping](src/main/kotlin/g1301_1400/s1309_decrypt_string_from_alphabet_to_integer_mapping/Solution.kt)| Easy | String | 129 | 95.45
501+
| 1309 |[Decrypt String from Alphabet to Integer Mapping](src/main/kotlin/g1301_1400/s1309_decrypt_string_from_alphabet_to_integer_mapping/Solution.kt)| Easy | String | 0 | 100.00
502502
| 0953 |[Verifying an Alien Dictionary](src/main/kotlin/g0901_1000/s0953_verifying_an_alien_dictionary/Solution.kt)| Easy | Array, String, Hash_Table | 137 | 100.00
503503

504504
#### Day 10 Linked List and Tree
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# Write your MySQL query statement below
2-
# #Easy #Database #2023_02_06_Time_305_ms_(59.80%)_Space_0B_(100.00%)
3-
select id, movie, description, rating from Cinema
4-
WHERE mod(id,2) = 1
5-
and
6-
description not LIKE '%boring%'
7-
order by rating DESC;
2+
# #Easy #Database #2025_04_23_Time_259_ms_(64.69%)_Space_0.0_MB_(100.00%)
3+
SELECT id, movie, description, rating
4+
FROM Cinema
5+
WHERE description != 'boring' AND id % 2 != 0
6+
ORDER BY rating DESC;
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,26 @@
11
package g1301_1400.s1309_decrypt_string_from_alphabet_to_integer_mapping
22

33
// #Easy #String #Programming_Skills_I_Day_9_String
4-
// #2023_06_05_Time_129_ms_(95.45%)_Space_34.8_MB_(63.64%)
4+
// #2025_04_24_Time_0_ms_(100.00%)_Space_40.80_MB_(77.78%)
55

66
class Solution {
77
fun freqAlphabets(s: String): String {
8-
val map: MutableMap<String, String> = HashMap()
9-
map["1"] = "a"
10-
map["2"] = "b"
11-
map["3"] = "c"
12-
map["4"] = "d"
13-
map["5"] = "e"
14-
map["6"] = "f"
15-
map["7"] = "g"
16-
map["8"] = "h"
17-
map["9"] = "i"
18-
map["10#"] = "j"
19-
map["11#"] = "k"
20-
map["12#"] = "l"
21-
map["13#"] = "m"
22-
map["14#"] = "n"
23-
map["15#"] = "o"
24-
map["16#"] = "p"
25-
map["17#"] = "q"
26-
map["18#"] = "r"
27-
map["19#"] = "s"
28-
map["20#"] = "t"
29-
map["21#"] = "u"
30-
map["22#"] = "v"
31-
map["23#"] = "w"
32-
map["24#"] = "x"
33-
map["25#"] = "y"
34-
map["26#"] = "z"
35-
val sb = StringBuilder()
36-
var i = 0
37-
while (i < s.length) {
38-
if ((("" + s[i]).toInt() == 1 || ("" + s[i]).toInt() == 2) &&
39-
i + 1 < s.length && i + 2 < s.length &&
40-
s[i + 2] == '#'
41-
) {
42-
sb.append(map[s.substring(i, i + 3)])
43-
i += 3
8+
val builder = StringBuilder()
9+
var i = s.length - 1
10+
while (i >= 0) {
11+
if (s[i] == '#') {
12+
decryptor(builder, i - 1, i - 2, s)
13+
i -= 3
4414
} else {
45-
sb.append(map["" + s[i]])
46-
i++
15+
val ch = (s[i].code - '0'.code + 96).toChar()
16+
builder.append(ch)
17+
i--
4718
}
4819
}
49-
return sb.toString()
20+
return builder.reverse().toString()
21+
}
22+
23+
private fun decryptor(builder: StringBuilder, a: Int, b: Int, s: String) {
24+
builder.append((((s[b].code - '0'.code) * 10 + s[a].code - '0'.code) + 96).toChar())
5025
}
5126
}
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
11
package g1301_1400.s1392_longest_happy_prefix
22

33
// #Hard #String #Hash_Function #String_Matching #Rolling_Hash
4-
// #2023_06_06_Time_291_ms_(50.00%)_Space_38.1_MB_(100.00%)
4+
// #2025_04_24_Time_7_ms_(100.00%)_Space_47.37_MB_(25.00%)
55

66
class Solution {
77
fun longestPrefix(s: String): String {
8-
val times = 2
9-
var prefixHash: Long = 0
10-
var suffixHash: Long = 0
11-
var multiplier: Long = 1
12-
var len: Long = 0
13-
// use some large prime as a modulo to avoid overflow errors, e.g. 10 ^ 9 + 7.
14-
val mod: Long = 1000000007
15-
for (i in 0 until s.length - 1) {
16-
prefixHash = (prefixHash * times + s[i].code.toLong()) % mod
17-
suffixHash = (multiplier * s[s.length - i - 1].code.toLong() + suffixHash) % mod
18-
if (prefixHash == suffixHash) {
19-
len = i.toLong() + 1
8+
val c = s.toCharArray()
9+
val n = c.size
10+
val a = IntArray(n)
11+
var max = 0
12+
var i = 1
13+
while (i < n) {
14+
if (c[max] == c[i]) {
15+
max++
16+
a[i] = max
17+
i++
18+
} else {
19+
if (max > 0) {
20+
max = a[max - 1]
21+
} else {
22+
a[i] = 0
23+
i++
24+
}
2025
}
21-
multiplier = multiplier * times % mod
2226
}
23-
return s.substring(0, len.toInt())
27+
return s.substring(0, a[n - 1])
2428
}
2529
}

src/test/kotlin/g1301_1400/s1392_longest_happy_prefix/SolutionTest.kt

+5
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,9 @@ internal class SolutionTest {
1414
fun longestPrefix2() {
1515
assertThat(Solution().longestPrefix("ababab"), equalTo("abab"))
1616
}
17+
18+
@Test
19+
fun longestPrefix3() {
20+
assertThat(Solution().longestPrefix("babbb"), equalTo("b"))
21+
}
1722
}

0 commit comments

Comments
 (0)