[LeetCode] 345. Reverse Vowels of a String (Python)

2022. 11. 4. 18:18·Algorithm
LeetCode 345. Reverse Vowels of a String
🗓️ Daily LeetCoding Challenge November, Day 4

String / Two Pointers

https://leetcode.com/problems/reverse-vowels-of-a-string/

 

Reverse Vowels of a String - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

1. 문제 설명

문자열 s가 주어지고, s의 모음만 순서를 뒤집은 후 리턴하는 문제이다.

이때, s에 대소문자가 모두 포함될 수 있다.

 

아래와 같이 s가 주어진다고 가정하자.

s = "leetcode"

s[1]과 s[7]을 스왑하고, s[2]와 s[5]를 스왑하면 된다.

따라서 s = "leotcede"를 리턴해야 한다.


2. 문제 접근

Two Pointers

맨 처음과 마지막의 문자를 포인팅하여 두 값이 모두 모음이면 스왑한다.

만약 둘 중 한 값이라도 자음이면 자음을 가리키는 포인터를 모음과 만날 때까지 계속 증가시키거나 감소시킨다.

이때, str 자료형은 스왑할 수 없으므로 list 자료형으로 바꾼 후에 투포인터로 처리한다.

loop 한 번에 처리 가능하므로 O(n)으로 처리할 수 있다.


3. 구현 코드

class Solution:
    def reverseVowels(self, s: str) -> str:
        s_list = list(s)
        i, j = 0, len(s) - 1  # 맨 앞과 뒤를 포인팅
        vowel = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']
        while i < j:
            while i < j and s_list[i] not in vowel:       # 앞쪽 포인터가 자음이면
                i += 1
            while i < j and s_list[j] not in vowel:       # 뒤쪽 포인터가 자음이면
                j -= 1

            if s_list[i] in vowel and s_list[j] in vowel: # 두 포인터가 가리키는 값을 스왑
                s_list[i], s_list[j] = s_list[j], s_list[i]
                i += 1
                j -= 1

        return ''.join(s_list)

입력 값으로 주어진 s를 str에서 list로 변경할 때

기존의 s를 s = list(s)로 변경하면 런타임이 크게 증가하므로 반드시 새로운 변수로 list(s)를 받도록 하자.

새로운 변수에 넣어준 경우
기존 변수에 다시 넣은 경우

 

'Algorithm' 카테고리의 다른 글
  • [LeetCode] 901. Online Stock Span
  • [LeetCode] 1544. Make The String Great (Python)
  • [LeetCode] 2131. Longest Palindrome by Concatenating Two Letter Words (Python)
  • [LeetCode] 433. Minimum Genetic Mutation (Python)
Bookish
Bookish
Waking Up Early :P / Ajou Univ
  • Bookish
    토끼의 발자취
    Bookish
  • 전체
    오늘
    어제
    • 분류 전체보기 (64)
      • GDSC Ajou (9)
      • Algorithm (15)
      • Lab (2)
      • Challenge (11)
      • Event (3)
      • Tips (4)
      • Daily (12)
      • 병원 (8)
  • 블로그 메뉴

    • Solved.ac
    • LeetCode
    • Kaggle
    • Manage
    • 홈
    • 태그
    • 미디어로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    빅데이터분석기사
    파이썬
    아주대학교 프로그래밍 경시대회
    Google Solution Challenge 2023
    삼성안과
    라섹후기
    Python
    GDSC
    라섹
    leetcode
    Daily LeetCoding Challenge
    ㅅㅅ안과
    백준
    라식
    리트코드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Bookish
[LeetCode] 345. Reverse Vowels of a String (Python)
상단으로

티스토리툴바