🔗 Problem Link
https://leetcode.com/problems/reverse-vowels-of-a-string/description/
❔Thinking
- 영단어가 주어지면, 모음(a,e,i,o,u)만을 역순으로 재배치하여 반환한다. (abe -> eba)
- 알파벳은 소문자와 대문자를 구분한다.
💻Solution
1. 단어에 포함된 모음을 배열에 담고, 해당 배열에서 pop 하여 순서 재배치
def reverseVowels(self, s: str) -> str:
vowels_set = set(['a','e','i','o','u','A','E','I','O','U'])
vowels_list = []
s = list(s)
for char in s:
if char in vowels_set:
vowels_list.append(char)
for i in range(len(s)):
if s[i] in vowels_set:
s[i] = vowels_list.pop()
return ''.join(s)
2. 투 포인터를 활용하여 양쪽에서 모음을 찾고, 두 위치의 알파벳을 교환
def reverseVowels(self, s: str) -> str:
s = list(s)
left, right = 0, len(s)-1
vowels = set('AEIOUaeiou')
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)
🗝️keypoint
- 모음의 대소문자를 구분한다.
- 양쪽에서 모음을 찾고 서로의 위치를 교환하면 한번에 해결할 수 있다.
'코딩테스트 > Python' 카테고리의 다른 글
[LeetCode] 443. String Compression (0) | 2025.03.26 |
---|---|
[LeetCode] 238. Product of Array Except Self (0) | 2025.03.24 |
[LeetCode] 605. Can Place Flowers (0) | 2025.03.18 |
[LeetCode] 1768. Merge Strings Alternately (0) | 2025.02.26 |
[Programmers] Level 2. 빛의 경로 사이클 (0) | 2025.02.25 |