From 91c8a73a202377e42b9a55b44728492c562cd9f5 Mon Sep 17 00:00:00 2001 From: SYEDMDSAAD <134770714+SYEDMDSAAD@users.noreply.github.com> Date: Wed, 18 Feb 2026 14:19:35 +0530 Subject: [PATCH 1/7] Add RemoveStars and ComplexNumberMultiply string algorithms --- .../thealgorithms/strings/RemoveStars.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/java/com/thealgorithms/strings/RemoveStars.java diff --git a/src/main/java/com/thealgorithms/strings/RemoveStars.java b/src/main/java/com/thealgorithms/strings/RemoveStars.java new file mode 100644 index 000000000000..4f52259f6257 --- /dev/null +++ b/src/main/java/com/thealgorithms/strings/RemoveStars.java @@ -0,0 +1,36 @@ +package com.thealgorithms.strings; + +/** + * Removes characters affected by '*' in a string. + * Each '*' deletes the closest non-star character to its left. + * + * Example: + * Input: leet**cod*e + * Output: lecoe + */ + +public final class RemoveStars { + + private RemoveStars() { + // Private constructor to prevent instantiation(object creation) + } + + public static String removeStars(String s) { + StringBuilder result = new StringBuilder(); + + for (char c : s.toCharArray()) { + if (c == '*') { + if (result.length() > 0) { + result.deleteCharAt(result.length() - 1); + } + } else { + result.append(c); + } + } + return result.toString(); + } + public static void main(String[] args) { + String example = "leet**cod*e"; + System.out.println(removeStars(example)); + } +} From a4b33c742e2546fa950d138a7124a5886490c119 Mon Sep 17 00:00:00 2001 From: SYEDMDSAAD <134770714+SYEDMDSAAD@users.noreply.github.com> Date: Wed, 18 Feb 2026 14:35:48 +0530 Subject: [PATCH 2/7] Add RemoveStars and ComplexNumberMultiply string algorithms --- .../strings/ComplexNumberMultiply.java | 35 +++++++++++++++++++ .../thealgorithms/strings/RemoveStars.java | 3 +- 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/thealgorithms/strings/ComplexNumberMultiply.java diff --git a/src/main/java/com/thealgorithms/strings/ComplexNumberMultiply.java b/src/main/java/com/thealgorithms/strings/ComplexNumberMultiply.java new file mode 100644 index 000000000000..19b152bb8760 --- /dev/null +++ b/src/main/java/com/thealgorithms/strings/ComplexNumberMultiply.java @@ -0,0 +1,35 @@ +package com.thealgorithms.strings; + +/** + * Multiplies two complex numbers represented as strings in the form "a+bi". + * + * Example: + * Input: 1+1i , 1+1i + * Output: 0+2i + */ +public final class ComplexNumberMultiply { + + private ComplexNumberMultiply() { + } + + private static int[] parse(String num) { + String[] parts = num.split("\\+"); + int real = Integer.parseInt(parts[0]); + int imaginary = Integer.parseInt(parts[1].replace("i", "")); + return new int[] {real, imaginary}; + } + + public static String multiply(String num1, String num2) { + int[] a = parse(num1); + int[] b = parse(num2); + + int real = a[0] * b[0] - a[1] * b[1]; + int imaginary = a[0] * b[1] + a[1] * b[0]; + + return real + "+" + imaginary + "i"; + } + + public static void main(String[] args) { + System.out.println(multiply("1+1i", "1+1i")); + } +} diff --git a/src/main/java/com/thealgorithms/strings/RemoveStars.java b/src/main/java/com/thealgorithms/strings/RemoveStars.java index 4f52259f6257..ed7f405cf132 100644 --- a/src/main/java/com/thealgorithms/strings/RemoveStars.java +++ b/src/main/java/com/thealgorithms/strings/RemoveStars.java @@ -12,12 +12,11 @@ public final class RemoveStars { private RemoveStars() { - // Private constructor to prevent instantiation(object creation) } public static String removeStars(String s) { StringBuilder result = new StringBuilder(); - + for (char c : s.toCharArray()) { if (c == '*') { if (result.length() > 0) { From a74392066c8476a5a70c1b1d1e42e2aa65f82f11 Mon Sep 17 00:00:00 2001 From: SYEDMDSAAD <134770714+SYEDMDSAAD@users.noreply.github.com> Date: Wed, 18 Feb 2026 14:49:33 +0530 Subject: [PATCH 3/7] Add unit tests for RemoveStars and ComplexNumber Multiply --- .../strings/ComplexNumberMultiplyTest.java | 23 +++++++++++++++ .../strings/RemoveStarsTest.java | 28 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/test/java/com/thealgorithms/strings/ComplexNumberMultiplyTest.java create mode 100644 src/test/java/com/thealgorithms/strings/RemoveStarsTest.java diff --git a/src/test/java/com/thealgorithms/strings/ComplexNumberMultiplyTest.java b/src/test/java/com/thealgorithms/strings/ComplexNumberMultiplyTest.java new file mode 100644 index 000000000000..c3e58b0925d9 --- /dev/null +++ b/src/test/java/com/thealgorithms/strings/ComplexNumberMultiplyTest.java @@ -0,0 +1,23 @@ +package com.thealgorithms.strings; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class ComplexNumberMultiplyTest { + + @Test + void testExample() { + assertEquals("0+2i", ComplexNumberMultiply.multiply("1+1i", "1+1i")); + } + + @Test + void testNegative() { + assertEquals("0+-2i", ComplexNumberMultiply.multiply("1+-1i", "1+-1i")); + } + + @Test + void testZero() { + assertEquals("0+0i", ComplexNumberMultiply.multiply("0+0i", "5+3i")); + } +} \ No newline at end of file diff --git a/src/test/java/com/thealgorithms/strings/RemoveStarsTest.java b/src/test/java/com/thealgorithms/strings/RemoveStarsTest.java new file mode 100644 index 000000000000..3beb2e83399b --- /dev/null +++ b/src/test/java/com/thealgorithms/strings/RemoveStarsTest.java @@ -0,0 +1,28 @@ +package com.thealgorithms.strings; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class RemoveStarsTest { + + @Test + void testExampleCase() { + assertEquals("lecoe", RemoveStars.removeStars("leet**cod*e")); + } + + @Test + void testAllStars() { + assertEquals("", RemoveStars.removeStars("abc***")); + } + + @Test + void testNoStars() { + assertEquals("hello", RemoveStars.removeStars("hello")); + } + + @Test + void testSingleCharacter() { + assertEquals("", RemoveStars.removeStars("a*")); + } +} From 22786907a6dad7a58570545cc973a7fefd9d5bf2 Mon Sep 17 00:00:00 2001 From: SYEDMDSAAD <134770714+SYEDMDSAAD@users.noreply.github.com> Date: Wed, 18 Feb 2026 15:00:48 +0530 Subject: [PATCH 4/7] Fix checkstyle --- .../com/thealgorithms/strings/ComplexNumberMultiplyTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/strings/ComplexNumberMultiplyTest.java b/src/test/java/com/thealgorithms/strings/ComplexNumberMultiplyTest.java index c3e58b0925d9..231253ff0fcd 100644 --- a/src/test/java/com/thealgorithms/strings/ComplexNumberMultiplyTest.java +++ b/src/test/java/com/thealgorithms/strings/ComplexNumberMultiplyTest.java @@ -20,4 +20,4 @@ void testNegative() { void testZero() { assertEquals("0+0i", ComplexNumberMultiply.multiply("0+0i", "5+3i")); } -} \ No newline at end of file +} From e2a3cdbfbf45d92ef0d14ade225ce5a0a020bc69 Mon Sep 17 00:00:00 2001 From: SYEDMDSAAD <134770714+SYEDMDSAAD@users.noreply.github.com> Date: Wed, 18 Feb 2026 15:09:49 +0530 Subject: [PATCH 5/7] Remove redundant main method --- .../java/com/thealgorithms/strings/ComplexNumberMultiply.java | 4 ---- src/main/java/com/thealgorithms/strings/RemoveStars.java | 4 ---- 2 files changed, 8 deletions(-) diff --git a/src/main/java/com/thealgorithms/strings/ComplexNumberMultiply.java b/src/main/java/com/thealgorithms/strings/ComplexNumberMultiply.java index 19b152bb8760..0f334cb7c353 100644 --- a/src/main/java/com/thealgorithms/strings/ComplexNumberMultiply.java +++ b/src/main/java/com/thealgorithms/strings/ComplexNumberMultiply.java @@ -28,8 +28,4 @@ public static String multiply(String num1, String num2) { return real + "+" + imaginary + "i"; } - - public static void main(String[] args) { - System.out.println(multiply("1+1i", "1+1i")); - } } diff --git a/src/main/java/com/thealgorithms/strings/RemoveStars.java b/src/main/java/com/thealgorithms/strings/RemoveStars.java index ed7f405cf132..816311e9da84 100644 --- a/src/main/java/com/thealgorithms/strings/RemoveStars.java +++ b/src/main/java/com/thealgorithms/strings/RemoveStars.java @@ -28,8 +28,4 @@ public static String removeStars(String s) { } return result.toString(); } - public static void main(String[] args) { - String example = "leet**cod*e"; - System.out.println(removeStars(example)); - } } From baadaabad5a2eb9398e326ea7927c587e9541cae Mon Sep 17 00:00:00 2001 From: SYEDMDSAAD <134770714+SYEDMDSAAD@users.noreply.github.com> Date: Wed, 18 Feb 2026 23:25:18 +0530 Subject: [PATCH 6/7] Move ComplexNumberMultiply to maths package and add input validation with tests --- .../{strings => maths}/ComplexNumberMultiply.java | 11 ++++++----- .../ComplexNumberMultiplyTest.java | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 6 deletions(-) rename src/main/java/com/thealgorithms/{strings => maths}/ComplexNumberMultiply.java (73%) rename src/test/java/com/thealgorithms/{strings => maths}/ComplexNumberMultiplyTest.java (54%) diff --git a/src/main/java/com/thealgorithms/strings/ComplexNumberMultiply.java b/src/main/java/com/thealgorithms/maths/ComplexNumberMultiply.java similarity index 73% rename from src/main/java/com/thealgorithms/strings/ComplexNumberMultiply.java rename to src/main/java/com/thealgorithms/maths/ComplexNumberMultiply.java index 0f334cb7c353..4b68b7824574 100644 --- a/src/main/java/com/thealgorithms/strings/ComplexNumberMultiply.java +++ b/src/main/java/com/thealgorithms/maths/ComplexNumberMultiply.java @@ -1,11 +1,8 @@ -package com.thealgorithms.strings; +package com.thealgorithms.maths; /** * Multiplies two complex numbers represented as strings in the form "a+bi". - * - * Example: - * Input: 1+1i , 1+1i - * Output: 0+2i + * Supports negative values and validates input format. */ public final class ComplexNumberMultiply { @@ -13,6 +10,10 @@ private ComplexNumberMultiply() { } private static int[] parse(String num) { + if (num == null || !num.matches("-?\\d+\\+-?\\d+i")) { + throw new IllegalArgumentException("Invalid complex number format: " + num); + } + String[] parts = num.split("\\+"); int real = Integer.parseInt(parts[0]); int imaginary = Integer.parseInt(parts[1].replace("i", "")); diff --git a/src/test/java/com/thealgorithms/strings/ComplexNumberMultiplyTest.java b/src/test/java/com/thealgorithms/maths/ComplexNumberMultiplyTest.java similarity index 54% rename from src/test/java/com/thealgorithms/strings/ComplexNumberMultiplyTest.java rename to src/test/java/com/thealgorithms/maths/ComplexNumberMultiplyTest.java index 231253ff0fcd..8b1ff8034e8c 100644 --- a/src/test/java/com/thealgorithms/strings/ComplexNumberMultiplyTest.java +++ b/src/test/java/com/thealgorithms/maths/ComplexNumberMultiplyTest.java @@ -1,6 +1,7 @@ -package com.thealgorithms.strings; +package com.thealgorithms.maths; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; @@ -20,4 +21,16 @@ void testNegative() { void testZero() { assertEquals("0+0i", ComplexNumberMultiply.multiply("0+0i", "5+3i")); } + + @Test + void testInvalidFormat() { + assertThrows(IllegalArgumentException.class, + () -> ComplexNumberMultiply.multiply("1+1", "1+1i")); + } + + @Test + void testNullInput() { + assertThrows(IllegalArgumentException.class, + () -> ComplexNumberMultiply.multiply(null, "1+1i")); + } } From eae49a2febd070db8c4a5cecaaccbe1df6c11591 Mon Sep 17 00:00:00 2001 From: SYEDMDSAAD <134770714+SYEDMDSAAD@users.noreply.github.com> Date: Wed, 18 Feb 2026 23:35:16 +0530 Subject: [PATCH 7/7] Apply spotless formatting --- .../com/thealgorithms/maths/ComplexNumberMultiplyTest.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/thealgorithms/maths/ComplexNumberMultiplyTest.java b/src/test/java/com/thealgorithms/maths/ComplexNumberMultiplyTest.java index 8b1ff8034e8c..02e964b53771 100644 --- a/src/test/java/com/thealgorithms/maths/ComplexNumberMultiplyTest.java +++ b/src/test/java/com/thealgorithms/maths/ComplexNumberMultiplyTest.java @@ -24,13 +24,11 @@ void testZero() { @Test void testInvalidFormat() { - assertThrows(IllegalArgumentException.class, - () -> ComplexNumberMultiply.multiply("1+1", "1+1i")); + assertThrows(IllegalArgumentException.class, () -> ComplexNumberMultiply.multiply("1+1", "1+1i")); } @Test void testNullInput() { - assertThrows(IllegalArgumentException.class, - () -> ComplexNumberMultiply.multiply(null, "1+1i")); + assertThrows(IllegalArgumentException.class, () -> ComplexNumberMultiply.multiply(null, "1+1i")); } }