From 04c15a879c81473d153bfaf0cd4027a8d4419e32 Mon Sep 17 00:00:00 2001 From: Milad Sadeghi Date: Mon, 29 Sep 2025 12:32:21 +0330 Subject: [PATCH 1/5] Implementing AlternativeStringArrange --- .../strings/AlternativeStringArrange.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/main/java/com/thealgorithms/strings/AlternativeStringArrange.java diff --git a/src/main/java/com/thealgorithms/strings/AlternativeStringArrange.java b/src/main/java/com/thealgorithms/strings/AlternativeStringArrange.java new file mode 100644 index 000000000000..f2a76d0d6477 --- /dev/null +++ b/src/main/java/com/thealgorithms/strings/AlternativeStringArrange.java @@ -0,0 +1,49 @@ +package com.thealgorithms.strings; + +/** + * This class provides a method to arrange two strings by alternating their characters. + * If one string is longer, the remaining characters of the longer string are appended at the end. + *

+ * Example: + * Input: "abc", "12345" + * Output: "a1b2c345" + *

+ * Input: "abcd", "12" + * Output: "a1b2cd" + * + * @author Milad Sadeghi + */ +public final class AlternativeStringArrange { + + // Private constructor to prevent instantiation + private AlternativeStringArrange() { + throw new IllegalStateException("Utility class"); + } + + /** + * Arranges two strings by alternating their characters. + * + * @param firstString the first input string + * @param secondString the second input string + * @return a new string with characters from both strings arranged alternately + */ + public static String arrange(String firstString, String secondString) { + StringBuilder result = new StringBuilder(); + int length1 = firstString.length(); + int length2 = secondString.length(); + int minLength = Math.min(length1, length2); + + for (int i = 0; i < minLength; i++) { + result.append(firstString.charAt(i)); + result.append(secondString.charAt(i)); + } + + if (length1 > length2) { + result.append(firstString.substring(minLength)); + } else if (length2 > length1) { + result.append(secondString.substring(minLength)); + } + + return result.toString(); + } +} From c165bec5d2d9fb639d5c85342d0d32024065d99d Mon Sep 17 00:00:00 2001 From: Milad Sadeghi Date: Mon, 29 Sep 2025 12:32:51 +0330 Subject: [PATCH 2/5] Testing the functionality of AlternativeStringArrange in AlternativeStringArrangeTest --- .../strings/AlternativeStringArrangeTest.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java diff --git a/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java b/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java new file mode 100644 index 000000000000..6613cbabac12 --- /dev/null +++ b/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java @@ -0,0 +1,32 @@ +package com.thealgorithms.strings; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class AlternativeStringArrangeTest { + + // Method to provide test data + private static Stream provideTestData() { + return Stream.of( + new Object[]{"abc", "12345", "a1b2c345"}, + new Object[]{"abcd", "12", "a1b2cd"}, + new Object[]{"", "123", "123"}, + new Object[]{"abc", "", "abc"}, + new Object[]{"a", "1", "a1"}, + new Object[]{"ab", "12", "a1b2"}, + new Object[]{"abcdef", "123", "a1b2c3def"}, + new Object[]{"ab", "123456", "a1b23456"} + ); + } + + // Parameterized test using the provided test data + @ParameterizedTest(name = "{0} and {1} should return {2}") + @MethodSource("provideTestData") + void arrangeTest(String input1, String input2, String expected) { + assertEquals(expected, AlternativeStringArrange.arrange(input1, input2)); + } +} From 328b0a7f68f88c50c81a55cbb36b6902007d7275 Mon Sep 17 00:00:00 2001 From: Milad Sadeghi Date: Mon, 29 Sep 2025 13:12:13 +0330 Subject: [PATCH 3/5] Testing the private constructor --- .../strings/AlternativeStringArrangeTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java b/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java index 6613cbabac12..73cbbd6422b6 100644 --- a/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java +++ b/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java @@ -1,5 +1,6 @@ package com.thealgorithms.strings; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -29,4 +30,17 @@ private static Stream provideTestData() { void arrangeTest(String input1, String input2, String expected) { assertEquals(expected, AlternativeStringArrange.arrange(input1, input2)); } + + // Testing private constructor to prevent instantiation + @Test + void preventInstantiationTest() { + try { + var constructor = AlternativeStringArrange.class.getDeclaredConstructor(); + constructor.setAccessible(true); + constructor.newInstance(); + } catch (Exception e) { + assertEquals(IllegalStateException.class, e.getCause().getClass()); + assertEquals("Utility class", e.getCause().getMessage()); + } + } } From 361af19c7dbe656a8533565aabcb49f04ad7b121 Mon Sep 17 00:00:00 2001 From: Milad Sadeghi Date: Mon, 29 Sep 2025 13:19:01 +0330 Subject: [PATCH 4/5] Applying clang-format --- .../strings/AlternativeStringArrangeTest.java | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java b/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java index 73cbbd6422b6..ff0b034250b0 100644 --- a/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java +++ b/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java @@ -1,27 +1,18 @@ package com.thealgorithms.strings; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; - class AlternativeStringArrangeTest { // Method to provide test data private static Stream provideTestData() { - return Stream.of( - new Object[]{"abc", "12345", "a1b2c345"}, - new Object[]{"abcd", "12", "a1b2cd"}, - new Object[]{"", "123", "123"}, - new Object[]{"abc", "", "abc"}, - new Object[]{"a", "1", "a1"}, - new Object[]{"ab", "12", "a1b2"}, - new Object[]{"abcdef", "123", "a1b2c3def"}, - new Object[]{"ab", "123456", "a1b23456"} - ); + return Stream.of(new Object[] {"abc", "12345", "a1b2c345"}, new Object[] {"abcd", "12", "a1b2cd"}, new Object[] {"", "123", "123"}, new Object[] {"abc", "", "abc"}, new Object[] {"a", "1", "a1"}, new Object[] {"ab", "12", "a1b2"}, new Object[] {"abcdef", "123", "a1b2c3def"}, + new Object[] {"ab", "123456", "a1b23456"}); } // Parameterized test using the provided test data From cf64388f85d58b59ee32f8d8fe5d6dbbaa570873 Mon Sep 17 00:00:00 2001 From: Milad Sadeghi Date: Mon, 29 Sep 2025 13:32:16 +0330 Subject: [PATCH 5/5] Resolving PR checks issues --- .../strings/AlternativeStringArrange.java | 1 - .../strings/AlternativeStringArrangeTest.java | 14 -------------- 2 files changed, 15 deletions(-) diff --git a/src/main/java/com/thealgorithms/strings/AlternativeStringArrange.java b/src/main/java/com/thealgorithms/strings/AlternativeStringArrange.java index f2a76d0d6477..cf736dbd8cab 100644 --- a/src/main/java/com/thealgorithms/strings/AlternativeStringArrange.java +++ b/src/main/java/com/thealgorithms/strings/AlternativeStringArrange.java @@ -17,7 +17,6 @@ public final class AlternativeStringArrange { // Private constructor to prevent instantiation private AlternativeStringArrange() { - throw new IllegalStateException("Utility class"); } /** diff --git a/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java b/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java index ff0b034250b0..9e8ae9e9f153 100644 --- a/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java +++ b/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java @@ -3,7 +3,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.stream.Stream; -import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -21,17 +20,4 @@ private static Stream provideTestData() { void arrangeTest(String input1, String input2, String expected) { assertEquals(expected, AlternativeStringArrange.arrange(input1, input2)); } - - // Testing private constructor to prevent instantiation - @Test - void preventInstantiationTest() { - try { - var constructor = AlternativeStringArrange.class.getDeclaredConstructor(); - constructor.setAccessible(true); - constructor.newInstance(); - } catch (Exception e) { - assertEquals(IllegalStateException.class, e.getCause().getClass()); - assertEquals("Utility class", e.getCause().getMessage()); - } - } }