[ LeetCode #344 ]

[ LeetCode #344 ] Reverse String 문자열 뒤집기 #

[ LeetCode #344 ] Reverse String 바로가기 #

💡 유용한 지식 #

리스트 역순으로 정렬

# reverse() 함수 활용
s.reverse()

# 슬라이싱 방법 활용
s = s[::-1]
s[:] = s[::-1]

# 투포인터를 활용하는 방법도 있다.
def reverseString(s):
	left, right = 0, len(s)-1
	while left < right:
		s[left], s[right] = s[right], s[left]
		left += 1
		right -= 1
	return s

문제 #

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.

Constraints:

내가 했던 접근 #

[ 풀이 ]

메모리 공간이 O(1) 만 있으므로 끝에서부터 pop()하여 맨 앞에 insert() 수행

[ 결과 ]

Runtime: 628 ms, faster than 5.01% of Python online submissions for Reverse String.
Memory Usage: 22 MB, less than 7.54% of Python online submissions for Reverse String.

[ 코드 ]

class Solution(object):
    def reverseString(self, s):
        for i in range(len(s)-1):
            s.insert(i, s.pop())
        return s

## 초기 생각 : 슬라이싱 s[::-1]

[ 반성 ]

  • 처음에는 슬라이싱으로 해결하려했지만 extra memory O(1)을 간과했다. 따라서 insert로 접근
  • 새로 리스트 만드는건 물론 더 메모리를 잡아먹으므로 불가능
  • 메모리에만 집중해서 시간복잡도는 생각을 못했다.

책 풀이 #

[ 풀이 ]

  • 총 3가지 방법 소개
    • 방법 1 : 투포인터
    • 방법 2 : Pythonic 방법, reverse() 활용
    • 방법 3 : Pythonic 방법, 슬라이싱 활용

[ 결과 ]

방법 1 : 투포인터

Runtime: 215 ms, faster than 55.01% of Python online submissions for Reverse String.
Memory Usage: 21 MB, less than 81.03% of Python online submissions for Reverse String.

방법 2 : Pythonic 방법, reverse() 활용

Runtime: 162 ms, faster than 95.45% of Python online submissions for Reverse String.
Memory Usage: 21.3 MB, less than 29.73% of Python online submissions for Reverse String.

방법 3 : Pythonic 방법, 슬라이싱 활용

Runtime: 164 ms, faster than 95.03% of Python online submissions for Reverse String.
Memory Usage: 20.9 MB, less than 94.74% of Python online submissions for Reverse String.

[ 코드 ]

방법 1 : 투포인터

class Solution(object):
    def reverseString(self, s):
        left, right = 0, len(s)-1
        while left < right:
            s[left],s[right] = s[right], s[left]
            left += 1
            right -= 1
        return s

방법 2 : Pythonic 방법, reverse() 활용

class Solution(object):
    def reverseString(self, s):
        s.reverse()
        return s

방법 3 : Pythonic 방법, 슬라이싱 활용

class Solution(object):
    def reverseString(self, s):
        s[:] = s[::-1]
        return s
# s = s[::-1] 을 사용하면 메모리가 부족하지만
# s[:] = s[::-1] 을 사용하면 된다.