From f5a5935e982de0688caace6cdb801f2a6622d9fd Mon Sep 17 00:00:00 2001 From: Lusina <12752833+BrianLusina@users.noreply.github.com> Date: Mon, 9 Mar 2026 09:12:36 +0300 Subject: [PATCH 1/3] feat(algorithms, stacks, strings): reverse character array in-place --- .../stack/asteroid_collision/README.md | 0 .../stack/asteroid_collision/__init__.py | 0 .../test_asteroid_collision.py | 0 .../stack/bracket_validator/README.md | 0 .../stack/bracket_validator/__init__.py | 0 .../test_bracket_validator.py | 0 .../stack/decimal_to_binary/README.md | 0 .../stack/decimal_to_binary/__init__.py | 0 .../test_decimal_to_binary.py | 0 .../stack/decode_string/README.md | 0 .../stack/decode_string/__init__.py | 0 .../stack/decode_string/test_decode_string.py | 0 .../stack/nextgreater/README.md | 0 .../stack/nextgreater/__init__.py | 0 .../stack/nextgreater/test_next_greater.py | 0 .../stack/removing_stars/README.md | 0 .../stack/removing_stars/__init__.py | 0 .../removing_stars/test_remove_starts.py | 0 algorithms/stack/reverse_string/README.md | 46 ++++++++++++++++++ .../stack/reverse_string/__init__.py | 17 +++++++ .../examples/reverse_string_example_1.png | Bin 0 -> 21546 bytes .../examples/reverse_string_example_2.png | Bin 0 -> 20687 bytes .../examples/reverse_string_example_3.png | Bin 0 -> 28465 bytes .../reverse_string/test_reverse_string.py | 30 ++++++++++++ puzzles/stack/__init__.py | 0 puzzles/stack/reverse_string/README.md | 3 -- .../reverse_string/test_reverse_string.py | 14 ------ 27 files changed, 93 insertions(+), 17 deletions(-) rename {puzzles => algorithms}/stack/asteroid_collision/README.md (100%) rename {puzzles => algorithms}/stack/asteroid_collision/__init__.py (100%) rename {puzzles => algorithms}/stack/asteroid_collision/test_asteroid_collision.py (100%) rename {puzzles => algorithms}/stack/bracket_validator/README.md (100%) rename {puzzles => algorithms}/stack/bracket_validator/__init__.py (100%) rename {puzzles => algorithms}/stack/bracket_validator/test_bracket_validator.py (100%) rename {puzzles => algorithms}/stack/decimal_to_binary/README.md (100%) rename {puzzles => algorithms}/stack/decimal_to_binary/__init__.py (100%) rename {puzzles => algorithms}/stack/decimal_to_binary/test_decimal_to_binary.py (100%) rename {puzzles => algorithms}/stack/decode_string/README.md (100%) rename {puzzles => algorithms}/stack/decode_string/__init__.py (100%) rename {puzzles => algorithms}/stack/decode_string/test_decode_string.py (100%) rename {puzzles => algorithms}/stack/nextgreater/README.md (100%) rename {puzzles => algorithms}/stack/nextgreater/__init__.py (100%) rename {puzzles => algorithms}/stack/nextgreater/test_next_greater.py (100%) rename {puzzles => algorithms}/stack/removing_stars/README.md (100%) rename {puzzles => algorithms}/stack/removing_stars/__init__.py (100%) rename {puzzles => algorithms}/stack/removing_stars/test_remove_starts.py (100%) create mode 100644 algorithms/stack/reverse_string/README.md rename {puzzles => algorithms}/stack/reverse_string/__init__.py (71%) create mode 100644 algorithms/stack/reverse_string/images/examples/reverse_string_example_1.png create mode 100644 algorithms/stack/reverse_string/images/examples/reverse_string_example_2.png create mode 100644 algorithms/stack/reverse_string/images/examples/reverse_string_example_3.png create mode 100644 algorithms/stack/reverse_string/test_reverse_string.py delete mode 100644 puzzles/stack/__init__.py delete mode 100644 puzzles/stack/reverse_string/README.md delete mode 100644 puzzles/stack/reverse_string/test_reverse_string.py diff --git a/puzzles/stack/asteroid_collision/README.md b/algorithms/stack/asteroid_collision/README.md similarity index 100% rename from puzzles/stack/asteroid_collision/README.md rename to algorithms/stack/asteroid_collision/README.md diff --git a/puzzles/stack/asteroid_collision/__init__.py b/algorithms/stack/asteroid_collision/__init__.py similarity index 100% rename from puzzles/stack/asteroid_collision/__init__.py rename to algorithms/stack/asteroid_collision/__init__.py diff --git a/puzzles/stack/asteroid_collision/test_asteroid_collision.py b/algorithms/stack/asteroid_collision/test_asteroid_collision.py similarity index 100% rename from puzzles/stack/asteroid_collision/test_asteroid_collision.py rename to algorithms/stack/asteroid_collision/test_asteroid_collision.py diff --git a/puzzles/stack/bracket_validator/README.md b/algorithms/stack/bracket_validator/README.md similarity index 100% rename from puzzles/stack/bracket_validator/README.md rename to algorithms/stack/bracket_validator/README.md diff --git a/puzzles/stack/bracket_validator/__init__.py b/algorithms/stack/bracket_validator/__init__.py similarity index 100% rename from puzzles/stack/bracket_validator/__init__.py rename to algorithms/stack/bracket_validator/__init__.py diff --git a/puzzles/stack/bracket_validator/test_bracket_validator.py b/algorithms/stack/bracket_validator/test_bracket_validator.py similarity index 100% rename from puzzles/stack/bracket_validator/test_bracket_validator.py rename to algorithms/stack/bracket_validator/test_bracket_validator.py diff --git a/puzzles/stack/decimal_to_binary/README.md b/algorithms/stack/decimal_to_binary/README.md similarity index 100% rename from puzzles/stack/decimal_to_binary/README.md rename to algorithms/stack/decimal_to_binary/README.md diff --git a/puzzles/stack/decimal_to_binary/__init__.py b/algorithms/stack/decimal_to_binary/__init__.py similarity index 100% rename from puzzles/stack/decimal_to_binary/__init__.py rename to algorithms/stack/decimal_to_binary/__init__.py diff --git a/puzzles/stack/decimal_to_binary/test_decimal_to_binary.py b/algorithms/stack/decimal_to_binary/test_decimal_to_binary.py similarity index 100% rename from puzzles/stack/decimal_to_binary/test_decimal_to_binary.py rename to algorithms/stack/decimal_to_binary/test_decimal_to_binary.py diff --git a/puzzles/stack/decode_string/README.md b/algorithms/stack/decode_string/README.md similarity index 100% rename from puzzles/stack/decode_string/README.md rename to algorithms/stack/decode_string/README.md diff --git a/puzzles/stack/decode_string/__init__.py b/algorithms/stack/decode_string/__init__.py similarity index 100% rename from puzzles/stack/decode_string/__init__.py rename to algorithms/stack/decode_string/__init__.py diff --git a/puzzles/stack/decode_string/test_decode_string.py b/algorithms/stack/decode_string/test_decode_string.py similarity index 100% rename from puzzles/stack/decode_string/test_decode_string.py rename to algorithms/stack/decode_string/test_decode_string.py diff --git a/puzzles/stack/nextgreater/README.md b/algorithms/stack/nextgreater/README.md similarity index 100% rename from puzzles/stack/nextgreater/README.md rename to algorithms/stack/nextgreater/README.md diff --git a/puzzles/stack/nextgreater/__init__.py b/algorithms/stack/nextgreater/__init__.py similarity index 100% rename from puzzles/stack/nextgreater/__init__.py rename to algorithms/stack/nextgreater/__init__.py diff --git a/puzzles/stack/nextgreater/test_next_greater.py b/algorithms/stack/nextgreater/test_next_greater.py similarity index 100% rename from puzzles/stack/nextgreater/test_next_greater.py rename to algorithms/stack/nextgreater/test_next_greater.py diff --git a/puzzles/stack/removing_stars/README.md b/algorithms/stack/removing_stars/README.md similarity index 100% rename from puzzles/stack/removing_stars/README.md rename to algorithms/stack/removing_stars/README.md diff --git a/puzzles/stack/removing_stars/__init__.py b/algorithms/stack/removing_stars/__init__.py similarity index 100% rename from puzzles/stack/removing_stars/__init__.py rename to algorithms/stack/removing_stars/__init__.py diff --git a/puzzles/stack/removing_stars/test_remove_starts.py b/algorithms/stack/removing_stars/test_remove_starts.py similarity index 100% rename from puzzles/stack/removing_stars/test_remove_starts.py rename to algorithms/stack/removing_stars/test_remove_starts.py diff --git a/algorithms/stack/reverse_string/README.md b/algorithms/stack/reverse_string/README.md new file mode 100644 index 00000000..db564659 --- /dev/null +++ b/algorithms/stack/reverse_string/README.md @@ -0,0 +1,46 @@ +# Reverse String + +You are given a character array, s, representing a string. Write a function that reverses the array in-place. + +- The reversal must be done by modifying the original array directly. +- You cannot use extra memory beyond a constant amount O(1). + +## Constraints + +- 1 <= `s.length` <= 1000 +- Each `s[i]` is printable ASCII character + +## Examples + +![Example 1](./images/examples/reverse_string_example_1.png) +![Example 2](./images/examples/reverse_string_example_2.png) +![Example 3](./images/examples/reverse_string_example_3.png) + +## Solution + +As the input is given as a character array, the problem can be solved efficiently by reversing the array in place without +using extra space for another array. The key idea is that reversing means swapping the first character with the last, the +second with the second-last, and so on, until all characters are placed in the correct reversed order. + +To achieve this, we can use the two pointer technique: one pointer starts at the beginning of the array and the other at +the end. We swap the characters at each step at these two positions, then move the pointers closer toward the center. +This continues until the pointers meet or cross, ensuring all characters are reversed. + +The steps of the algorithm are as follows: + +1. Initialize two pointers: left at the start, and right at the end of the array. +2. While left < right: + - Swap the characters at s[left] and s[right]. + - Increment left by 1 and decrement right by 1 to move the pointers inward. +3. The process terminates once the left and right pointers meet simultaneously. + +### Time Complexity + +The solution’s time complexity is O(n), where nnn is the length of the input array, s. Each character in the string is +swapped at most once as the two pointers move toward the center. As every element is visited at most once, the overall +time complexity is O(n). + +### Space Complexity + +The solution’s space complexity is O(1), as the reversal is done in place using only two pointers (left and right). No +additional data structures are required, regardless of the input size.Thus, the overall space complexity remains O(1). \ No newline at end of file diff --git a/puzzles/stack/reverse_string/__init__.py b/algorithms/stack/reverse_string/__init__.py similarity index 71% rename from puzzles/stack/reverse_string/__init__.py rename to algorithms/stack/reverse_string/__init__.py index a61f9288..4e0ac723 100644 --- a/puzzles/stack/reverse_string/__init__.py +++ b/algorithms/stack/reverse_string/__init__.py @@ -1,3 +1,5 @@ +from typing import List + from datastructures.stacks.dynamic import DynamicSizeStack as Stack @@ -29,3 +31,18 @@ def reverse_string(text: str) -> str: reversed_string += stack.pop() return reversed_string + + +def reverse_string_char_array(s: List[str]): + if not s or len(s) == 1: + return + + # Initialize two pointers: left at start, right at end + left = 0 + right = len(s) - 1 + + # Swap characters while left is before right + while left < right: + s[left], s[right] = s[right], s[left] + left += 1 + right -= 1 diff --git a/algorithms/stack/reverse_string/images/examples/reverse_string_example_1.png b/algorithms/stack/reverse_string/images/examples/reverse_string_example_1.png new file mode 100644 index 0000000000000000000000000000000000000000..dcb7022b58d2b79ec8728fb8744fda31cb229631 GIT binary patch literal 21546 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 Ib4q9e0MhEhmH+?% literal 0 HcmV?d00001 diff --git a/algorithms/stack/reverse_string/images/examples/reverse_string_example_2.png b/algorithms/stack/reverse_string/images/examples/reverse_string_example_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a017f5809c6830831977ae28370d367146e7fb42 GIT binary patch literal 20687 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 literal 0 HcmV?d00001 diff --git a/algorithms/stack/reverse_string/images/examples/reverse_string_example_3.png b/algorithms/stack/reverse_string/images/examples/reverse_string_example_3.png new file mode 100644 index 0000000000000000000000000000000000000000..039b475b871aa08c4237914b2df79b1eb57068ff GIT binary patch literal 28465 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 ae{uWy5Np=Q-0+*NX_~6KDpe2|{Qm&)QOy Date: Mon, 9 Mar 2026 06:13:41 +0000 Subject: [PATCH 2/3] updating DIRECTORY.md --- DIRECTORY.md | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 648a5ad4..7793f007 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -369,10 +369,24 @@ * Shell Sort * [Test Shell Sort](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/sorting/shell_sort/test_shell_sort.py) * Stack + * Asteroid Collision + * [Test Asteroid Collision](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/stack/asteroid_collision/test_asteroid_collision.py) + * Bracket Validator + * [Test Bracket Validator](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/stack/bracket_validator/test_bracket_validator.py) * Daily Temperatures * [Test Daily Temperatures](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/stack/daily_temperatures/test_daily_temperatures.py) + * Decimal To Binary + * [Test Decimal To Binary](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/stack/decimal_to_binary/test_decimal_to_binary.py) + * Decode String + * [Test Decode String](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/stack/decode_string/test_decode_string.py) * Minimum String Length After Removing Substrings * [Test Min Str Length After Removing Substrings](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/stack/minimum_string_length_after_removing_substrings/test_min_str_length_after_removing_substrings.py) + * Nextgreater + * [Test Next Greater](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/stack/nextgreater/test_next_greater.py) + * Removing Stars + * [Test Remove Starts](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/stack/removing_stars/test_remove_starts.py) + * Reverse String + * [Test Reverse String](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/stack/reverse_string/test_reverse_string.py) * Strings * Caeser Cipher * [Test Caeser](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/strings/caeser_cipher/test_caeser.py) @@ -901,21 +915,6 @@ * Queue * Recent Counter * [Test Recent Calls](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/queue/recent_counter/test_recent_calls.py) - * Stack - * Asteroid Collision - * [Test Asteroid Collision](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/stack/asteroid_collision/test_asteroid_collision.py) - * Bracket Validator - * [Test Bracket Validator](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/stack/bracket_validator/test_bracket_validator.py) - * Decimal To Binary - * [Test Decimal To Binary](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/stack/decimal_to_binary/test_decimal_to_binary.py) - * Decode String - * [Test Decode String](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/stack/decode_string/test_decode_string.py) - * Nextgreater - * [Test Next Greater](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/stack/nextgreater/test_next_greater.py) - * Removing Stars - * [Test Remove Starts](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/stack/removing_stars/test_remove_starts.py) - * Reverse String - * [Test Reverse String](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/stack/reverse_string/test_reverse_string.py) * Students And Lunch * [Test Students Lunch](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/students_and_lunch/test_students_lunch.py) * Trees @@ -972,6 +971,10 @@ * [Test Multiply 5](https://github.com/BrianLusina/PythonSnips/blob/master/pymath/multiply_5/test_multiply_5.py) * Perfect Square * [Test Perfect Squares](https://github.com/BrianLusina/PythonSnips/blob/master/pymath/perfect_square/test_perfect_squares.py) + * Power Of I + * [Test Power Of I](https://github.com/BrianLusina/PythonSnips/blob/master/pymath/power_of_i/test_power_of_i.py) + * Power Of Two + * [Test Power Of Two](https://github.com/BrianLusina/PythonSnips/blob/master/pymath/power_of_two/test_power_of_two.py) * Rectangle Area * [Test Compute Area](https://github.com/BrianLusina/PythonSnips/blob/master/pymath/rectangle_area/test_compute_area.py) * Reverse Integer @@ -1263,7 +1266,6 @@ * [Test Plus Minus](https://github.com/BrianLusina/PythonSnips/blob/master/tests/pymath/test_plus_minus.py) * [Test Population Growth](https://github.com/BrianLusina/PythonSnips/blob/master/tests/pymath/test_population_growth.py) * [Test Power Digit Sum](https://github.com/BrianLusina/PythonSnips/blob/master/tests/pymath/test_power_digit_sum.py) - * [Test Power Of I](https://github.com/BrianLusina/PythonSnips/blob/master/tests/pymath/test_power_of_i.py) * [Test Power Of Sum](https://github.com/BrianLusina/PythonSnips/blob/master/tests/pymath/test_power_of_sum.py) * [Test Product Fib](https://github.com/BrianLusina/PythonSnips/blob/master/tests/pymath/test_product_fib.py) * [Test Pythagorean Triplet](https://github.com/BrianLusina/PythonSnips/blob/master/tests/pymath/test_pythagorean_triplet.py) From 24d1711af6dd46fef28c649799b96baebc4ccd70 Mon Sep 17 00:00:00 2001 From: Lusina <12752833+BrianLusina@users.noreply.github.com> Date: Mon, 9 Mar 2026 09:27:29 +0300 Subject: [PATCH 3/3] Update algorithms/stack/reverse_string/__init__.py Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- algorithms/stack/reverse_string/__init__.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/algorithms/stack/reverse_string/__init__.py b/algorithms/stack/reverse_string/__init__.py index 4e0ac723..f0653652 100644 --- a/algorithms/stack/reverse_string/__init__.py +++ b/algorithms/stack/reverse_string/__init__.py @@ -33,7 +33,22 @@ def reverse_string(text: str) -> str: return reversed_string -def reverse_string_char_array(s: List[str]): +def reverse_string_char_array(s: List[str]) -> None: + """ + Reverses a character array in place using two-pointer technique. + + Reference: https://leetcode.com/problems/reverse-string/ + + Complexity: + Where n is the length of the input list + Time: O(n), each character is visited at most once + Space: O(1), only two pointers used, no extra data structures + + Args: + s (List[str]): character array to reverse in place + Returns: + None: modifies the input list in place + """ if not s or len(s) == 1: return