Fuck LeetCode  >  Array  >  344. Reverse String  >  Solved in Java, Python, C++, JavaScript, C#, Go, Ruby  >  Repost or Contribute

LeetCode link: 344. Reverse String, difficulty: Easy.

Write a function that reverses a string. The input string is given as an array of characters s.

You must do this by modifying the input array in-place with O(1) extra memory.

Example 1:

Input: s = ["h","e","l","l","o"]

Output: ["o","l","l","e","h"]

Example 2:

Input: s = ["H","a","n","n","a","h"]

Output: ["h","a","n","n","a","H"]

Constraints:

Hint 1

The entire logic for reversing a string is based on using the opposite directional two-pointer approach!


Intuition

  1. This problem can be solved in one line of code using the built-in sort() method of the programming language. If this question is asked in an interview, the questioner should be testing how to do it without the built-in method.
  2. Use two pointers with opposite directions, initially one pointer points to the index 0 and the other pointer points to the index s.length - 1.
  3. Traverse the elements of the array, and the loop condition is while (left < right). In the loop body, left += 1, right -= 1.
  4. In the loop body, swap the two values.
  5. The above is the template for two pointers in opposite directions.

Steps

  1. Use two pointers with opposite directions, initially one pointer points to the index 0 and the other pointer points to the index s.length - 1.

    left = 0
    right = s.length - 1
    
  2. Traverse the elements of the array, and the loop condition is while (left < right). In the loop body, left += 1, right -= 1.

    left = 0
    right = s.length - 1
    
    while left < right # 1
      left += 1 # 2
      right -= 1 # 3
    end
    
  3. In the loop body, swap the two values.

    left = 0
    right = s.length - 1
    
    while left < right
      s[left], s[right] = s[right], s[left] # 1
    
      left += 1
      right -= 1
    end
    

Complexity

Time complexity

O(N)

Space complexity

O(1)

Java #

class Solution {
    public void reverseString(char[] s) {
        var left = 0;
        var right = s.length - 1;

        while (left < right) {
            var leftValue = s[left];
            s[left] = s[right];
            s[right] = leftValue;

            left++;
            right--;
        }
    }
}

Python #

class Solution:
    def reverseString(self, s: List[str]) -> None:
        left = 0
        right = len(s) - 1

        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1

C++ #

class Solution {
public:
    void reverseString(vector<char>& s) {
        auto left = 0;
        auto right = s.size() - 1;

        while (left < right) {
            swap(s[left], s[right]);

            left++;
            right--;
        }
    }
};

JavaScript #

var reverseString = function (s) {
  let left = 0
  let right = s.length - 1

  while (left < right) {
    [s[left], s[right]] = [s[right], s[left]]

    left++
    right--
  }
};

C# #

public class Solution
{
    public void ReverseString(char[] s)
    {
        int left = 0;
        int right = s.Length - 1;

        while (left < right)
        {
            (s[left], s[right]) = (s[right], s[left]);

            left++;
            right--;
        }
    }
}

Go #

func reverseString(s []byte)  {
    left := 0
    right := len(s) - 1

    for left < right {
        s[left], s[right] = s[right], s[left]

        left++
        right--
    }
}

Ruby #

def reverse_string(s)
  left = 0
  right = s.size - 1

  while left < right
    s[left], s[right] = s[right], s[left]

    left += 1
    right -= 1
  end
end

Other languages

Welcome to contribute code to our GitHub repository, thanks! The location of this solution is 344. Reverse String.