From 219fbd38f625f02f87f66ac6bf88460d5b27195e Mon Sep 17 00:00:00 2001 From: Nikita Rusetskii Date: Thu, 4 Jul 2024 19:04:56 +0200 Subject: [PATCH 1/2] Add Reverse String Problem --- .../java/com/xtenzq/arrays/TwoPointers.java | 18 +++++++ .../com/xtenzq/arrays/TwoPointersTest.java | 49 +++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/algorithms-and-data-structures/src/main/java/com/xtenzq/arrays/TwoPointers.java b/algorithms-and-data-structures/src/main/java/com/xtenzq/arrays/TwoPointers.java index 686b365..038f33c 100644 --- a/algorithms-and-data-structures/src/main/java/com/xtenzq/arrays/TwoPointers.java +++ b/algorithms-and-data-structures/src/main/java/com/xtenzq/arrays/TwoPointers.java @@ -110,5 +110,23 @@ public static boolean isSubsequence(String s, String t) { return i == s.length(); } + + /** + * Reverses the input array of characters in-place. + * + * @param s the array of characters to be reversed + * @implNote This method runs in {@code O(n)} time complexity and {@code O(1)} space complexity, + * where {@code n} is the length of {@code s}. + */ + public static void reverseString(char[] s) { + int i = 0, j = s.length - 1; + while (i < j) { + var temp = s[i]; + s[i] = s[j]; + s[j] = temp; + i++; + j--; + } + } } diff --git a/algorithms-and-data-structures/src/test/java/com/xtenzq/arrays/TwoPointersTest.java b/algorithms-and-data-structures/src/test/java/com/xtenzq/arrays/TwoPointersTest.java index 192970a..613d9de 100644 --- a/algorithms-and-data-structures/src/test/java/com/xtenzq/arrays/TwoPointersTest.java +++ b/algorithms-and-data-structures/src/test/java/com/xtenzq/arrays/TwoPointersTest.java @@ -6,6 +6,7 @@ import static com.xtenzq.arrays.TwoPointers.canBeSummed; import static com.xtenzq.arrays.TwoPointers.isPalindrome; import static com.xtenzq.arrays.TwoPointers.mergeSortedArrays; +import static com.xtenzq.arrays.TwoPointers.reverseString; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -281,4 +282,52 @@ void testInterleavedNonSubsequence() { String t = "abcde"; assertFalse(isSubsequence(s, t)); } + + @Test + void testReverseStringWithEvenNumberOfCharacters() { + char[] input = {'h', 'e', 'l', 'l', 'o'}; + char[] expected = {'o', 'l', 'l', 'e', 'h'}; + reverseString(input); + assertArrayEquals(expected, input); + } + + @Test + void testReverseStringWithOddNumberOfCharacters() { + char[] input = {'a', 'b', 'c', 'd', 'e'}; + char[] expected = {'e', 'd', 'c', 'b', 'a'}; + reverseString(input); + assertArrayEquals(expected, input); + } + + @Test + void testReverseStringWithSingleCharacter() { + char[] input = {'a'}; + char[] expected = {'a'}; + reverseString(input); + assertArrayEquals(expected, input); + } + + @Test + void testReverseStringWithEmptyArray() { + char[] input = {}; + char[] expected = {}; + reverseString(input); + assertArrayEquals(expected, input); + } + + @Test + void testReverseStringWithRepeatedCharacters() { + char[] input = {'a', 'a', 'a', 'a'}; + char[] expected = {'a', 'a', 'a', 'a'}; + reverseString(input); + assertArrayEquals(expected, input); + } + + @Test + void testReverseStringWithSpecialCharacters() { + char[] input = {'!', '@', '#', '$', '%'}; + char[] expected = {'%', '$', '#', '@', '!'}; + reverseString(input); + assertArrayEquals(expected, input); + } } \ No newline at end of file From ac28f08f5c241b295109290403cf6356cc5f1640 Mon Sep 17 00:00:00 2001 From: Nikita Rusetskii Date: Thu, 4 Jul 2024 19:10:58 +0200 Subject: [PATCH 2/2] Add link to LeetCode problem --- .../src/main/java/com/xtenzq/arrays/TwoPointers.java | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-and-data-structures/src/main/java/com/xtenzq/arrays/TwoPointers.java b/algorithms-and-data-structures/src/main/java/com/xtenzq/arrays/TwoPointers.java index 038f33c..3bb5098 100644 --- a/algorithms-and-data-structures/src/main/java/com/xtenzq/arrays/TwoPointers.java +++ b/algorithms-and-data-structures/src/main/java/com/xtenzq/arrays/TwoPointers.java @@ -117,6 +117,7 @@ public static boolean isSubsequence(String s, String t) { * @param s the array of characters to be reversed * @implNote This method runs in {@code O(n)} time complexity and {@code O(1)} space complexity, * where {@code n} is the length of {@code s}. + * @see 344. Reverse String */ public static void reverseString(char[] s) { int i = 0, j = s.length - 1;