02. Reverse String


🎯 leetcode - 344. Reverse String
🤔 私の答え
📌 質問する
- 파이썬 알고리즘 인터뷰 2번 문제
📌 名前の日付
2020.01.14
📌 試行回数
2 try
💡 Code
1番の方法
class Solution:
    def reverseString(self, s: List[str]) -> None:
        s = s[::-1]
        print(s)
2番の方法
class Solution:
    def reverseString(self, s: List[str]) -> None:
        for i in range(int(len(s) / 2)):
            s[i], s[len(s) - i - 1] = s[len(s) - i - 1], s[i]
        print(s)
💡 トラブルシューティング方法
1번 방법
- 슬라이싱을 이용하여 list를 거꾸로 뒤집었다.
2번 방법
- 앞에서부터 출발하는 인덱스가 list의 절반에 도달할 때까지 for문을 반복
- 앞에서부터 출발하는 인덱스는 i
- 뒤에서부터 출발하는 인덱스는 len(s) - 1 - i
- 내부 swap을 이용해 list 내부에서 처리하였다.
💡 新知
1번
- list도 문자열처럼 슬라이싱으로 처리할 수 있다.
答えを間違える理由
1번이 leetcode에서 오류가 떴다.
- 리스트 내부를 직접 조작하라는 공간적 제약(O(1)) 때문에 변수 할당 처리에 제약이 있었다.
- 책에 의하면 s[:] = s[::-1]의 트릭을 이용하여 처리하면 오류 없이 잘 동작한다고 한다.
😉 別の解釈
📌 一つ.二重ポインタ交換の使用
class Solution:
    def reverseString(self, s: List[str]) -> None:
        left, right = 0, len(s) - 1
        while left < right:
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1
        print(s)
💡 新知
- 투 포인터란, 2개의 포인터를 이용해 범위를 조정해가며 풀이하는 방식이다.
- 위의 코드는 점점 더 범위를 좁혀가며 스왑하는 형태로 풀이한 방식이다. 
📌 二.Pythonのreverse()関数
class Solution:
    def reverseString(self, s: List[str]) -> None:
        s.reverse()
💡 新知
- reverse()는 list에만 제공이 된다.