From 2e732198a490a9187def27232a6c578ea18e7246 Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Wed, 23 Apr 2025 10:00:06 +0300 Subject: [PATCH 1/3] Improved tasks 620, 1012, 1309, 1392 --- .../s0620_not_boring_movies/script.sql | 11 ++-- .../Solution.java | 2 +- .../Solution.java | 58 +++++-------------- .../s1392_longest_happy_prefix/Solution.java | 33 ++++++----- 4 files changed, 39 insertions(+), 65 deletions(-) diff --git a/src/main/java/g0601_0700/s0620_not_boring_movies/script.sql b/src/main/java/g0601_0700/s0620_not_boring_movies/script.sql index 07498b6ce..3d77c150c 100644 --- a/src/main/java/g0601_0700/s0620_not_boring_movies/script.sql +++ b/src/main/java/g0601_0700/s0620_not_boring_movies/script.sql @@ -1,7 +1,6 @@ # Write your MySQL query statement below -# #Easy #Database #2022_03_21_Time_258_ms_(28.33%)_Space_0B_(100.00%) -SELECT * -FROM cinema -WHERE description != 'boring' -AND ID % 2 = 1 -ORDER BY rating desc; +# #Easy #Database #2025_04_23_Time_259_ms_(64.69%)_Space_0.0_MB_(100.00%) +SELECT id, movie, description, rating +FROM Cinema +WHERE description != 'boring' AND id % 2 != 0 +ORDER BY rating DESC; diff --git a/src/main/java/g1001_1100/s1012_numbers_with_repeated_digits/Solution.java b/src/main/java/g1001_1100/s1012_numbers_with_repeated_digits/Solution.java index 58fc32905..affbacdb3 100644 --- a/src/main/java/g1001_1100/s1012_numbers_with_repeated_digits/Solution.java +++ b/src/main/java/g1001_1100/s1012_numbers_with_repeated_digits/Solution.java @@ -1,6 +1,6 @@ package g1001_1100.s1012_numbers_with_repeated_digits; -// #Hard #Dynamic_Programming #Math #2022_02_25_Time_3_ms_(28.17%)_Space_41.8_MB_(7.04%) +// #Hard #Dynamic_Programming #Math #2025_04_23_Time_2_ms_(50.64%)_Space_40.70_MB_(60.90%) import java.util.HashSet; diff --git a/src/main/java/g1301_1400/s1309_decrypt_string_from_alphabet_to_integer_mapping/Solution.java b/src/main/java/g1301_1400/s1309_decrypt_string_from_alphabet_to_integer_mapping/Solution.java index 2076665f1..6fee96b42 100644 --- a/src/main/java/g1301_1400/s1309_decrypt_string_from_alphabet_to_integer_mapping/Solution.java +++ b/src/main/java/g1301_1400/s1309_decrypt_string_from_alphabet_to_integer_mapping/Solution.java @@ -1,54 +1,26 @@ package g1301_1400.s1309_decrypt_string_from_alphabet_to_integer_mapping; // #Easy #String #Programming_Skills_I_Day_9_String -// #2022_03_15_Time_6_ms_(28.25%)_Space_42.6_MB_(29.40%) - -import java.util.HashMap; -import java.util.Map; +// #2025_04_23_Time_0_ms_(100.00%)_Space_41.42_MB_(89.95%) public class Solution { public String freqAlphabets(String s) { - Map map = new HashMap<>(); - map.put("1", "a"); - map.put("2", "b"); - map.put("3", "c"); - map.put("4", "d"); - map.put("5", "e"); - map.put("6", "f"); - map.put("7", "g"); - map.put("8", "h"); - map.put("9", "i"); - map.put("10#", "j"); - map.put("11#", "k"); - map.put("12#", "l"); - map.put("13#", "m"); - map.put("14#", "n"); - map.put("15#", "o"); - map.put("16#", "p"); - map.put("17#", "q"); - map.put("18#", "r"); - map.put("19#", "s"); - map.put("20#", "t"); - map.put("21#", "u"); - map.put("22#", "v"); - map.put("23#", "w"); - map.put("24#", "x"); - map.put("25#", "y"); - map.put("26#", "z"); - StringBuilder sb = new StringBuilder(); - int i = 0; - while (i < s.length()) { - if ((Integer.parseInt("" + s.charAt(i)) == 1 || Integer.parseInt("" + s.charAt(i)) == 2) - && i + 1 < s.length() - && i + 2 < s.length() - && s.charAt(i + 2) == '#') { - sb.append(map.get(s.substring(i, i + 3))); - i += 3; + StringBuilder builder = new StringBuilder(); + int i = s.length() - 1; + while (i >= 0) { + if (s.charAt(i) == '#') { + decryptor(builder, i - 1, i - 2, s); + i -= 3; } else { - sb.append(map.get("" + s.charAt(i))); - i++; + char ch = (char) (s.charAt(i) - '0' + 96); + builder.append(ch); + i--; } } - return sb.toString(); + return builder.reverse().toString(); + } + + private void decryptor(StringBuilder builder, int a, int b, String s) { + builder.append((char) (((s.charAt(b) - '0') * 10 + s.charAt(a) - '0') + 96)); } } diff --git a/src/main/java/g1301_1400/s1392_longest_happy_prefix/Solution.java b/src/main/java/g1301_1400/s1392_longest_happy_prefix/Solution.java index 962190237..2a2fdc7d9 100644 --- a/src/main/java/g1301_1400/s1392_longest_happy_prefix/Solution.java +++ b/src/main/java/g1301_1400/s1392_longest_happy_prefix/Solution.java @@ -1,25 +1,28 @@ package g1301_1400.s1392_longest_happy_prefix; // #Hard #String #Hash_Function #String_Matching #Rolling_Hash -// #2022_03_17_Time_39_ms_(28.37%)_Space_42.6_MB_(94.23%) +// #2025_04_23_Time_5_ms_(100.00%)_Space_45.92_MB_(23.63%) public class Solution { public String longestPrefix(String s) { - int times = 2; - long prefixHash = 0; - long suffixHash = 0; - long multiplier = 1; - long len = 0; - // use some large prime as a modulo to avoid overflow errors, e.g. 10 ^ 9 + 7. - long mod = 1000000007; - for (int i = 0; i < s.length() - 1; i++) { - prefixHash = (prefixHash * times + s.charAt(i)) % mod; - suffixHash = (multiplier * s.charAt(s.length() - i - 1) + suffixHash) % mod; - if (prefixHash == suffixHash) { - len = (long) i + 1; + char c[] = s.toCharArray(); + int n = c.length; + int a[] = new int[n]; + int max = 0, i = 1; + while (i < n) { + if (c[max] == c[i]) { + max++; + a[i] = max; + i++; + } else { + if (max > 0) { + max = a[max - 1]; + } else { + a[i] = 0; + i++; + } } - multiplier = multiplier * times % mod; } - return s.substring(0, (int) len); + return s.substring(0, a[n - 1]); } } From 8d33874557b435e7da35a24d74623e85c7596a91 Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Wed, 23 Apr 2025 10:03:49 +0300 Subject: [PATCH 2/3] Fixed style --- .../g1301_1400/s1392_longest_happy_prefix/Solution.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/g1301_1400/s1392_longest_happy_prefix/Solution.java b/src/main/java/g1301_1400/s1392_longest_happy_prefix/Solution.java index 2a2fdc7d9..b1e2b98ad 100644 --- a/src/main/java/g1301_1400/s1392_longest_happy_prefix/Solution.java +++ b/src/main/java/g1301_1400/s1392_longest_happy_prefix/Solution.java @@ -5,10 +5,11 @@ public class Solution { public String longestPrefix(String s) { - char c[] = s.toCharArray(); + char[] c = s.toCharArray(); int n = c.length; - int a[] = new int[n]; - int max = 0, i = 1; + int[] a = new int[n]; + int max = 0; + int i = 1; while (i < n) { if (c[max] == c[i]) { max++; From eaa14dea6715f17e69f45384a36669f9fef4eed1 Mon Sep 17 00:00:00 2001 From: Valentyn Kolesnikov Date: Wed, 23 Apr 2025 10:10:04 +0300 Subject: [PATCH 3/3] Added test --- .../g1301_1400/s1392_longest_happy_prefix/SolutionTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/test/java/g1301_1400/s1392_longest_happy_prefix/SolutionTest.java b/src/test/java/g1301_1400/s1392_longest_happy_prefix/SolutionTest.java index 06f1a83b8..bab650d30 100644 --- a/src/test/java/g1301_1400/s1392_longest_happy_prefix/SolutionTest.java +++ b/src/test/java/g1301_1400/s1392_longest_happy_prefix/SolutionTest.java @@ -15,4 +15,9 @@ void longestPrefix() { void longestPrefix2() { assertThat(new Solution().longestPrefix("ababab"), equalTo("abab")); } + + @Test + void longestPrefix3() { + assertThat(new Solution().longestPrefix("babbb"), equalTo("b")); + } }