티스토리 뷰

Algorithm/LeetCode

344. Reverse String

Jaime.Lee 2022. 4. 22. 10:30

소스 코드는 여기 있습니다.
문제는 여기 있습니다.

Problem

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:

  • 1 <= s.length <= 10^5
  • s[i] is a printable ascii character.

Solution

문자 배열이 주어질 때 해당 문자 배열을 뒤집는 기능을 구현하는 문제입니다.

상수 메모리를 추가로 사용할 수 있습니다.

변수 temp 하나만 사용해서 배열의 양 끝에서부터 swap 해주면 간단히 해결할 수 있습니다.

public class Solution {

  public void reverseString(char[] s) {
    int left = 0, right = s.length - 1;
    while (left < right) {
      char temp = s[left];
      s[left++] = s[right];
      s[right--] = temp;
    }
  }
}

Test

package io.lcalmsky.leetcode.reverse_string;

import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;

import org.junit.jupiter.api.Test;

class SolutionTest {

  @Test
  void testAll() {
    assertAll(
        () -> test(new char[]{'h', 'e', 'l', 'l', 'o'}, new char[]{'o', 'l', 'l', 'e', 'h'}),
        () -> test(new char[]{'H', 'a', 'n', 'n', 'a', 'h'},
            new char[]{'h', 'a', 'n', 'n', 'a', 'H'})
    );
  }

  private void test(char[] given, char[] expected) {
    // when
    Solution solution = new Solution();
    solution.reverseString(given);
    // then
    assertArrayEquals(expected, given);
  }
}

'Algorithm > LeetCode' 카테고리의 다른 글

856. Score of Parentheses  (0) 2022.04.24
31. Next Permutation  (0) 2022.04.23
1046. Last Stone Weight  (0) 2022.04.19
923. 3Sum With Multiplicity  (0) 2022.04.18
11. Container With Most Water  (0) 2022.04.16
댓글