Tech for good

[Leetcode/TwoPointer] 345. Reverse Vowels of a String 본문

IT/Computer Science

[Leetcode/TwoPointer] 345. Reverse Vowels of a String

Diana Kang 2025. 2. 21. 23:29

class Solution:
    def reverseVowels(self, s: str) -> str:
        left, right = 0, len(s) - 1
        vowels = set('aeiouAEIOU')  # 대소문자 모두 포함된 집합
        
        s = list(s)  # 문자열을 리스트로 변환 (문자 교환을 위해)

        while left < right:
            # 왼쪽 포인터가 모음이 아닐 경우 이동
            while left < right and s[left] not in vowels:
                left += 1
            # 오른쪽 포인터가 모음이 아닐 경우 이동
            while left < right and s[right] not in vowels:
                right -= 1
            # 모음이면 서로 교환
            s[left], s[right] = s[right], s[left]
            left += 1
            right -= 1
        
        return "".join(s)  # 리스트를 다시 문자열로 변환하여 반환

주요 사항:

  1.  in 연산자 사용
    • s[left] in vowels를 사용.
  2. 대소문자 포함된 set 사용
    • set('aeiouAEIOU')를 사용하여 in 연산을 빠르게 수행.
      • set해시 테이블을 기반으로 동작하므로, 요소가 존재하는지 확인하는 연산(in 연산자)평균적으로 O(1) (상수 시간)에 수행.
      • 반면, list나 tuple을 사용하면 O(n) (선형 시간) 소요.
  3. 문자열을 리스트로 변환 후 문자 교환
    • 문자열은 immutable(변경 불가) 이므로 list(s)로 변환 후 교환하고, 마지막에 "".join(s)로 다시 문자열로 변환.