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
를 지정해준다.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)
를 만족하는 풀이이다.