Add string algorithms: RemoveStars and ComplexNumberMultiply (#7275)

* Add RemoveStars and ComplexNumberMultiply string algorithms

* Add RemoveStars and ComplexNumberMultiply string algorithms

* Add unit tests for RemoveStars and ComplexNumber Multiply

* Fix checkstyle

* Remove redundant main method

* Move ComplexNumberMultiply to maths package and add input validation with tests

* Apply spotless formatting

---------

Co-authored-by: Deniz Altunkapan <deniz.altunkapan@outlook.com>
This commit is contained in:
Syed Mohammad Saad
2026-02-18 23:54:34 +05:30
committed by GitHub
parent 1646edaeb9
commit c9bda3dad7
4 changed files with 125 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
package com.thealgorithms.maths;
/**
* Multiplies two complex numbers represented as strings in the form "a+bi".
* Supports negative values and validates input format.
*/
public final class ComplexNumberMultiply {
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", ""));
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";
}
}

View File

@@ -0,0 +1,31 @@
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() {
}
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();
}
}

View File

@@ -0,0 +1,34 @@
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;
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"));
}
@Test
void testInvalidFormat() {
assertThrows(IllegalArgumentException.class, () -> ComplexNumberMultiply.multiply("1+1", "1+1i"));
}
@Test
void testNullInput() {
assertThrows(IllegalArgumentException.class, () -> ComplexNumberMultiply.multiply(null, "1+1i"));
}
}

View File

@@ -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*"));
}
}