From ef681e844de46e2b2ce57170c67ea6dc1f52c0be Mon Sep 17 00:00:00 2001 From: Milad Sadeghi Date: Mon, 29 Sep 2025 13:43:50 +0330 Subject: [PATCH] DEV: Implementing Alternative String Arrange (#6551) --- .../strings/AlternativeStringArrange.java | 48 +++++++++++++++++++ .../strings/AlternativeStringArrangeTest.java | 23 +++++++++ 2 files changed, 71 insertions(+) create mode 100644 src/main/java/com/thealgorithms/strings/AlternativeStringArrange.java create mode 100644 src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.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 000000000..cf736dbd8 --- /dev/null +++ b/src/main/java/com/thealgorithms/strings/AlternativeStringArrange.java @@ -0,0 +1,48 @@ +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() { + } + + /** + * 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(); + } +} 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 000000000..9e8ae9e9f --- /dev/null +++ b/src/test/java/com/thealgorithms/strings/AlternativeStringArrangeTest.java @@ -0,0 +1,23 @@ +package com.thealgorithms.strings; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.stream.Stream; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +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)); + } +}