[LeetCode] 345. Reverse Vowels of a String

김민우·2022년 11월 3일
0

알고리즘

목록 보기
59/189

- Problem

345. Reverse Vowels of a String

주어진 문자열 s에서 자음을 제외한 모음들만 뒤집어서 반환하는 문제이다.

- 내 풀이

class Solution:
    def reverseVowels(self, s: str) -> str:
        s = list(s)
        vowel_set = set(('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'))
        i, j = 0, len(s) - 1
        
        while i < j:
            if s[i] in vowel_set and s[j] in vowel_set:
                s[i], s[j] = s[j], s[i]
                i += 1
                j -= 1
            
            elif s[i] not in vowel_set:
                i += 1
            
            elif s[j] not in vowel_set:
                j -= 1
            
        
        return "".join(s)

투 포인터를 이용한 간단한 로직이다.

  • 문자열의 시작 인덱스i와 끝 인덱스j를 지정해준다.
  • while 문을 돌며 모음의 위치를 바꿔준다.
    - 만약 s[i]s[j] 모두 모음이라면 위치를 바꾸고 시작 인덱스는 1을 더해주고 끝 인덱스는 1을 빼준다.
    - elif s[i] not in vowel_set: s[j]는 모음이나 s[i]는 자음일 경우이다. 따라서 i에 1을 더해준다.
    - elif s[j] not in vowel_set: s[i]는 모음이나 s[j]는 자음일 경우이다. 따라서 j에 1을 빼준다.

결과적으로 시간 복잡도 O(n)를 만족하는 풀이이다.

- 결과

profile
Pay it forward.

0개의 댓글