From 9ffc96258dc238118113f489bcf867b7da9da04d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cgozhort=E2=80=9D?= Date: Wed, 26 Feb 2025 22:01:53 +0700 Subject: [PATCH 1/5] feat: add reverseUsingStringBuilder method to reverse a string --- .../strings/ReverseStringRecursive.java | 21 +++++++++++++++++++ .../strings/ReverseStringRecursiveTest.java | 7 +++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java b/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java index 817b0a8ccd09..a387551871f2 100644 --- a/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java +++ b/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java @@ -18,4 +18,25 @@ public static String reverse(String str) { return reverse(str.substring(1)) + str.charAt(0); } } + + /** + * Reverses the given string using a StringBuilder. + * This method converts the string to a character array, + * iterates through it in reverse order, and appends each character + * to a StringBuilder. + * + * @param string The input string to be reversed. + * @return The reversed string. + */ + public static String reverseUsingStringBuilder(String string){ + if (string.isEmpty()){ + return string; + } + char[] chars = string.toCharArray(); + StringBuilder sb = new StringBuilder(); + for (int i = string.length() -1; i >= 0; i--){ + sb.append(chars[i]); + } + return sb.toString(); + } } diff --git a/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java b/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java index 19daa61f48ca..dc5f5a92a171 100644 --- a/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java +++ b/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java @@ -13,4 +13,11 @@ public class ReverseStringRecursiveTest { testReverseString(String input, String expectedOutput) { assertEquals(expectedOutput, ReverseStringRecursive.reverse(input)); } + + @ParameterizedTest + @CsvSource({"'Hello World', 'dlroW olleH'", "'helloworld', 'dlrowolleh'", "'123456789', '987654321'", "'', ''", "'A', 'A'", "'!123 ABC xyz!', '!zyx CBA 321!'", "'Abc 123 Xyz', 'zyX 321 cbA'", "'12.34,56;78:90', '09:87;65,43.21'", "'abcdEFGHiJKL', 'LKJiHGFEdcba'", + "'MixOf123AndText!', '!txeTdnA321fOxiM'"}) + public void testReverseWithLoop(String input, String expectedOutput) { + assertEquals(expectedOutput, ReverseStringRecursive.reverseUsingStringBuilder(input)); + } } From 4bc0b60a39becbacce9590aaa75468ed14580e17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cgozhort=E2=80=9D?= Date: Wed, 26 Feb 2025 22:19:30 +0700 Subject: [PATCH 2/5] fix: resolve Checkstyle whitespace issues --- .../com/thealgorithms/strings/ReverseStringRecursive.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java b/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java index a387551871f2..fff275ca0edc 100644 --- a/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java +++ b/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java @@ -28,13 +28,13 @@ public static String reverse(String str) { * @param string The input string to be reversed. * @return The reversed string. */ - public static String reverseUsingStringBuilder(String string){ - if (string.isEmpty()){ + public static String reverseUsingStringBuilder(String string) { + if (string.isEmpty()) { return string; } char[] chars = string.toCharArray(); StringBuilder sb = new StringBuilder(); - for (int i = string.length() -1; i >= 0; i--){ + for (int i = string.length() - 1; i >= 0; i--) { sb.append(chars[i]); } return sb.toString(); From 797ef59d94569733a916cb58a61c1f0e20b6cc5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cgozhort=E2=80=9D?= Date: Wed, 26 Feb 2025 22:25:24 +0700 Subject: [PATCH 3/5] fix: resolve Checkstyle whitespace issues --- .../com/thealgorithms/strings/ReverseStringRecursiveTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java b/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java index dc5f5a92a171..0465eb2c74dc 100644 --- a/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java +++ b/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java @@ -17,7 +17,8 @@ public class ReverseStringRecursiveTest { @ParameterizedTest @CsvSource({"'Hello World', 'dlroW olleH'", "'helloworld', 'dlrowolleh'", "'123456789', '987654321'", "'', ''", "'A', 'A'", "'!123 ABC xyz!', '!zyx CBA 321!'", "'Abc 123 Xyz', 'zyX 321 cbA'", "'12.34,56;78:90', '09:87;65,43.21'", "'abcdEFGHiJKL', 'LKJiHGFEdcba'", "'MixOf123AndText!', '!txeTdnA321fOxiM'"}) - public void testReverseWithLoop(String input, String expectedOutput) { + public void + testReverseUsingStringBuilder(String input, String expectedOutput) { assertEquals(expectedOutput, ReverseStringRecursive.reverseUsingStringBuilder(input)); } } From 7ab6393cc671b01c39c8dc1639e8e0da058e30c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cgozhort=E2=80=9D?= Date: Wed, 26 Feb 2025 22:31:07 +0700 Subject: [PATCH 4/5] fix: resolve Checkstyle whitespace issues --- .../com/thealgorithms/strings/ReverseStringRecursiveTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java b/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java index 0465eb2c74dc..f7152adbbf00 100644 --- a/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java +++ b/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java @@ -16,7 +16,7 @@ public class ReverseStringRecursiveTest { @ParameterizedTest @CsvSource({"'Hello World', 'dlroW olleH'", "'helloworld', 'dlrowolleh'", "'123456789', '987654321'", "'', ''", "'A', 'A'", "'!123 ABC xyz!', '!zyx CBA 321!'", "'Abc 123 Xyz', 'zyX 321 cbA'", "'12.34,56;78:90', '09:87;65,43.21'", "'abcdEFGHiJKL', 'LKJiHGFEdcba'", - "'MixOf123AndText!', '!txeTdnA321fOxiM'"}) + "'MixOf123AndText!', '!txeTdnA321fOxiM'"}) public void testReverseUsingStringBuilder(String input, String expectedOutput) { assertEquals(expectedOutput, ReverseStringRecursive.reverseUsingStringBuilder(input)); From 8213586477ead3a5fc79fd29ff472ad602cb2681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cgozhort=E2=80=9D?= Date: Thu, 27 Feb 2025 17:21:57 +0700 Subject: [PATCH 5/5] refactor: move reverse method to a dedicated class --- .../thealgorithms/strings/ReverseString.java | 21 +++++++++++++++++++ .../strings/ReverseStringRecursive.java | 21 ------------------- .../strings/ReverseStringRecursiveTest.java | 8 ------- .../strings/ReverseStringTest.java | 6 ++++++ 4 files changed, 27 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/thealgorithms/strings/ReverseString.java b/src/main/java/com/thealgorithms/strings/ReverseString.java index 46a0494fcbb4..54a9b779e828 100644 --- a/src/main/java/com/thealgorithms/strings/ReverseString.java +++ b/src/main/java/com/thealgorithms/strings/ReverseString.java @@ -36,4 +36,25 @@ public static String reverse2(String str) { } return new String(value); } + + /** + * Reverse version 3 the given string using a StringBuilder. + * This method converts the string to a character array, + * iterates through it in reverse order, and appends each character + * to a StringBuilder. + * + * @param string The input string to be reversed. + * @return The reversed string. + */ + public static String reverse3(String string) { + if (string.isEmpty()) { + return string; + } + char[] chars = string.toCharArray(); + StringBuilder sb = new StringBuilder(); + for (int i = string.length() - 1; i >= 0; i--) { + sb.append(chars[i]); + } + return sb.toString(); + } } diff --git a/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java b/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java index fff275ca0edc..817b0a8ccd09 100644 --- a/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java +++ b/src/main/java/com/thealgorithms/strings/ReverseStringRecursive.java @@ -18,25 +18,4 @@ public static String reverse(String str) { return reverse(str.substring(1)) + str.charAt(0); } } - - /** - * Reverses the given string using a StringBuilder. - * This method converts the string to a character array, - * iterates through it in reverse order, and appends each character - * to a StringBuilder. - * - * @param string The input string to be reversed. - * @return The reversed string. - */ - public static String reverseUsingStringBuilder(String string) { - if (string.isEmpty()) { - return string; - } - char[] chars = string.toCharArray(); - StringBuilder sb = new StringBuilder(); - for (int i = string.length() - 1; i >= 0; i--) { - sb.append(chars[i]); - } - return sb.toString(); - } } diff --git a/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java b/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java index f7152adbbf00..19daa61f48ca 100644 --- a/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java +++ b/src/test/java/com/thealgorithms/strings/ReverseStringRecursiveTest.java @@ -13,12 +13,4 @@ public class ReverseStringRecursiveTest { testReverseString(String input, String expectedOutput) { assertEquals(expectedOutput, ReverseStringRecursive.reverse(input)); } - - @ParameterizedTest - @CsvSource({"'Hello World', 'dlroW olleH'", "'helloworld', 'dlrowolleh'", "'123456789', '987654321'", "'', ''", "'A', 'A'", "'!123 ABC xyz!', '!zyx CBA 321!'", "'Abc 123 Xyz', 'zyX 321 cbA'", "'12.34,56;78:90', '09:87;65,43.21'", "'abcdEFGHiJKL', 'LKJiHGFEdcba'", - "'MixOf123AndText!', '!txeTdnA321fOxiM'"}) - public void - testReverseUsingStringBuilder(String input, String expectedOutput) { - assertEquals(expectedOutput, ReverseStringRecursive.reverseUsingStringBuilder(input)); - } } diff --git a/src/test/java/com/thealgorithms/strings/ReverseStringTest.java b/src/test/java/com/thealgorithms/strings/ReverseStringTest.java index 501f702976ec..08f5fb586d82 100644 --- a/src/test/java/com/thealgorithms/strings/ReverseStringTest.java +++ b/src/test/java/com/thealgorithms/strings/ReverseStringTest.java @@ -25,4 +25,10 @@ public void testReverseString(String input, String expectedOutput) { public void testReverseString2(String input, String expectedOutput) { assertEquals(expectedOutput, ReverseString.reverse2(input)); } + + @ParameterizedTest + @MethodSource("testCases") + public void testReverseString3(String input, String expectedOutput) { + assertEquals(expectedOutput, ReverseString.reverse3(input)); + } }