From 451ed75a90afbfb154e7712f800b81bdbb9d9187 Mon Sep 17 00:00:00 2001 From: navaneedan07 Date: Thu, 31 Jul 2025 19:57:43 +0530 Subject: [PATCH 1/3] Refactored ReverseStringUsingStack --- src/test/java/com/thealgorithms/strings/ReverseStringTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/thealgorithms/strings/ReverseStringTest.java b/src/test/java/com/thealgorithms/strings/ReverseStringTest.java index 08f5fb586d82..9f13d82c75b9 100644 --- a/src/test/java/com/thealgorithms/strings/ReverseStringTest.java +++ b/src/test/java/com/thealgorithms/strings/ReverseStringTest.java @@ -3,6 +3,7 @@ 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.Arguments; import org.junit.jupiter.params.provider.MethodSource; From b7fbbcd97811a19b1ded992fcb667d991022d25e Mon Sep 17 00:00:00 2001 From: navaneedan07 Date: Thu, 31 Jul 2025 20:09:42 +0530 Subject: [PATCH 2/3] Add ReverseStringUsingStack --- .../stacks/ReverseStringUsingStack.java | 34 ++++++++++++++ .../thealgorithms/strings/ReverseString.java | 29 ++++++++++++ .../stacks/ReverseStringUsingStackTest.java | 44 +++++++++++++++++++ .../strings/ReverseStringTest.java | 12 +++++ 4 files changed, 119 insertions(+) create mode 100644 src/main/java/com/thealgorithms/stacks/ReverseStringUsingStack.java create mode 100644 src/test/java/com/thealgorithms/stacks/ReverseStringUsingStackTest.java diff --git a/src/main/java/com/thealgorithms/stacks/ReverseStringUsingStack.java b/src/main/java/com/thealgorithms/stacks/ReverseStringUsingStack.java new file mode 100644 index 000000000000..9e4c1ac9d1be --- /dev/null +++ b/src/main/java/com/thealgorithms/stacks/ReverseStringUsingStack.java @@ -0,0 +1,34 @@ +package com.thealgorithms.stacks; + +import java.util.Stack; + +public final class ReverseStringUsingStack { + private ReverseStringUsingStack() { + } + + /** + * @param str string to be reversed using stack + * @return reversed string + */ + public static String reverse(String str) { + // Check if the input string is null + if (str == null) { + throw new IllegalArgumentException("Input string cannot be null"); + } + Stack stack = new Stack<>(); + StringBuilder reversedString = new StringBuilder(); + // Check if the input string is empty + if (str.isEmpty()) { + return str; + } + // Push each character of the string onto the stack + for (char ch : str.toCharArray()) { + stack.push(ch); + } + // Pop each character from the stack and append to the StringBuilder + while (!stack.isEmpty()) { + reversedString.append(stack.pop()); + } + return reversedString.toString(); + } +} diff --git a/src/main/java/com/thealgorithms/strings/ReverseString.java b/src/main/java/com/thealgorithms/strings/ReverseString.java index 54a9b779e828..4969ac83e9dd 100644 --- a/src/main/java/com/thealgorithms/strings/ReverseString.java +++ b/src/main/java/com/thealgorithms/strings/ReverseString.java @@ -1,5 +1,7 @@ package com.thealgorithms.strings; +import java.util.Stack; + /** * Reverse String using different version */ @@ -57,4 +59,31 @@ public static String reverse3(String string) { } return sb.toString(); } + /** + * Reverses the given string using a stack. + * This method uses a stack to reverse the characters of the string. + * * @param str The input string to be reversed. + * @return The reversed string. + */ + public static String reverse4(String str) { + // Check if the input string is null + if (str == null) { + throw new IllegalArgumentException("Input string cannot be null"); + } + Stack stack = new Stack<>(); + StringBuilder reversedString = new StringBuilder(); + // Check if the input string is empty + if (str.isEmpty()) { + return str; + } + // Push each character of the string onto the stack + for (char ch : str.toCharArray()) { + stack.push(ch); + } + // Pop each character from the stack and append to the StringBuilder + while (!stack.isEmpty()) { + reversedString.append(stack.pop()); + } + return reversedString.toString(); + } } diff --git a/src/test/java/com/thealgorithms/stacks/ReverseStringUsingStackTest.java b/src/test/java/com/thealgorithms/stacks/ReverseStringUsingStackTest.java new file mode 100644 index 000000000000..cfd3ffee667b --- /dev/null +++ b/src/test/java/com/thealgorithms/stacks/ReverseStringUsingStackTest.java @@ -0,0 +1,44 @@ +package com.thealgorithms.stacks; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.Test; + +class ReverseStringUsingStackTest { + + @Test + void testRegularString() { + assertEquals("olleh", ReverseStringUsingStack.reverse("hello")); + } + + @Test + void testEmptyString() { + assertEquals("", ReverseStringUsingStack.reverse("")); + } + + @Test + void testPalindromeString() { + assertEquals("madam", ReverseStringUsingStack.reverse("madam")); + } + + @Test + void testSpecialCharacters() { + assertEquals("#@!321cba", ReverseStringUsingStack.reverse("abc123!@#")); + } + + @Test + void testSingleCharacter() { + assertEquals("x", ReverseStringUsingStack.reverse("x")); + } + + @Test + void testWhitespaceHandling() { + assertEquals("dlroW olleH", ReverseStringUsingStack.reverse("Hello World")); + } + + @Test + void testNullInput() { + assertThrows(IllegalArgumentException.class, () -> { ReverseStringUsingStack.reverse(null); }); + } +} diff --git a/src/test/java/com/thealgorithms/strings/ReverseStringTest.java b/src/test/java/com/thealgorithms/strings/ReverseStringTest.java index 9f13d82c75b9..9a7538f216c4 100644 --- a/src/test/java/com/thealgorithms/strings/ReverseStringTest.java +++ b/src/test/java/com/thealgorithms/strings/ReverseStringTest.java @@ -1,6 +1,7 @@ package com.thealgorithms.strings; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.stream.Stream; import org.junit.jupiter.api.Test; @@ -32,4 +33,15 @@ public void testReverseString2(String input, String expectedOutput) { public void testReverseString3(String input, String expectedOutput) { assertEquals(expectedOutput, ReverseString.reverse3(input)); } + + @ParameterizedTest + @MethodSource("testCases") + public void testReverseString4(String input, String expectedOutput) { + assertEquals(expectedOutput, ReverseString.reverse4(input)); + } + + @Test + public void testReverseString4WithNullInput() { + assertThrows(IllegalArgumentException.class, () -> ReverseString.reverse4(null)); + } } From ceb6b93ba07b455f42f343786079c9c6442ef19e Mon Sep 17 00:00:00 2001 From: navaneedan07 Date: Fri, 1 Aug 2025 15:21:43 +0530 Subject: [PATCH 3/3] Refactored ReverseStringUsingStack --- .../stacks/ReverseStringUsingStack.java | 34 -------------- .../thealgorithms/strings/ReverseString.java | 2 +- .../stacks/ReverseStringUsingStackTest.java | 44 ------------------- .../strings/ReverseStringTest.java | 8 ++-- 4 files changed, 5 insertions(+), 83 deletions(-) delete mode 100644 src/main/java/com/thealgorithms/stacks/ReverseStringUsingStack.java delete mode 100644 src/test/java/com/thealgorithms/stacks/ReverseStringUsingStackTest.java diff --git a/src/main/java/com/thealgorithms/stacks/ReverseStringUsingStack.java b/src/main/java/com/thealgorithms/stacks/ReverseStringUsingStack.java deleted file mode 100644 index 9e4c1ac9d1be..000000000000 --- a/src/main/java/com/thealgorithms/stacks/ReverseStringUsingStack.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.thealgorithms.stacks; - -import java.util.Stack; - -public final class ReverseStringUsingStack { - private ReverseStringUsingStack() { - } - - /** - * @param str string to be reversed using stack - * @return reversed string - */ - public static String reverse(String str) { - // Check if the input string is null - if (str == null) { - throw new IllegalArgumentException("Input string cannot be null"); - } - Stack stack = new Stack<>(); - StringBuilder reversedString = new StringBuilder(); - // Check if the input string is empty - if (str.isEmpty()) { - return str; - } - // Push each character of the string onto the stack - for (char ch : str.toCharArray()) { - stack.push(ch); - } - // Pop each character from the stack and append to the StringBuilder - while (!stack.isEmpty()) { - reversedString.append(stack.pop()); - } - return reversedString.toString(); - } -} diff --git a/src/main/java/com/thealgorithms/strings/ReverseString.java b/src/main/java/com/thealgorithms/strings/ReverseString.java index 4969ac83e9dd..996aa68bb307 100644 --- a/src/main/java/com/thealgorithms/strings/ReverseString.java +++ b/src/main/java/com/thealgorithms/strings/ReverseString.java @@ -65,7 +65,7 @@ public static String reverse3(String string) { * * @param str The input string to be reversed. * @return The reversed string. */ - public static String reverse4(String str) { + public static String reverseStringUsingStack(String str) { // Check if the input string is null if (str == null) { throw new IllegalArgumentException("Input string cannot be null"); diff --git a/src/test/java/com/thealgorithms/stacks/ReverseStringUsingStackTest.java b/src/test/java/com/thealgorithms/stacks/ReverseStringUsingStackTest.java deleted file mode 100644 index cfd3ffee667b..000000000000 --- a/src/test/java/com/thealgorithms/stacks/ReverseStringUsingStackTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.thealgorithms.stacks; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -import org.junit.jupiter.api.Test; - -class ReverseStringUsingStackTest { - - @Test - void testRegularString() { - assertEquals("olleh", ReverseStringUsingStack.reverse("hello")); - } - - @Test - void testEmptyString() { - assertEquals("", ReverseStringUsingStack.reverse("")); - } - - @Test - void testPalindromeString() { - assertEquals("madam", ReverseStringUsingStack.reverse("madam")); - } - - @Test - void testSpecialCharacters() { - assertEquals("#@!321cba", ReverseStringUsingStack.reverse("abc123!@#")); - } - - @Test - void testSingleCharacter() { - assertEquals("x", ReverseStringUsingStack.reverse("x")); - } - - @Test - void testWhitespaceHandling() { - assertEquals("dlroW olleH", ReverseStringUsingStack.reverse("Hello World")); - } - - @Test - void testNullInput() { - assertThrows(IllegalArgumentException.class, () -> { ReverseStringUsingStack.reverse(null); }); - } -} diff --git a/src/test/java/com/thealgorithms/strings/ReverseStringTest.java b/src/test/java/com/thealgorithms/strings/ReverseStringTest.java index 9a7538f216c4..476765b00dfc 100644 --- a/src/test/java/com/thealgorithms/strings/ReverseStringTest.java +++ b/src/test/java/com/thealgorithms/strings/ReverseStringTest.java @@ -36,12 +36,12 @@ public void testReverseString3(String input, String expectedOutput) { @ParameterizedTest @MethodSource("testCases") - public void testReverseString4(String input, String expectedOutput) { - assertEquals(expectedOutput, ReverseString.reverse4(input)); + public void testReverseStringUsingStack(String input, String expectedOutput) { + assertEquals(expectedOutput, ReverseString.reverseStringUsingStack(input)); } @Test - public void testReverseString4WithNullInput() { - assertThrows(IllegalArgumentException.class, () -> ReverseString.reverse4(null)); + public void testReverseStringUsingStackWithNullInput() { + assertThrows(IllegalArgumentException.class, () -> ReverseString.reverseStringUsingStack(null)); } }