본문 바로가기

리트코드/easy

[리트코드] 345. Reverse Vowels of a String - js

반응형

1. 문제

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

 

Reverse Vowels of a String - LeetCode

Can you solve this real interview question? Reverse Vowels of a String - Given a string s, reverse only all the vowels in the string and return it. The vowels are 'a', 'e', 'i', 'o', and 'u', and they can appear in both lower and upper cases, more than onc

leetcode.com

2. 코드

이 문제는 투 포인터를 사용해야하는 문제다.

처음엔 for문을 사용하여 길이를 반 잘라 앞의 부분을 저장해주는 식으로 접근했는데, 생각해보니 vowels에 포함되는 요소가 뒤 쪽에 포진되어 있거나 앞 쪽에 포진되어 있을 수 있다! => 잘못된 방법이다.

/**
 * @param {string} s
 * @return {string}
 */
var reverseVowels = function(s) {
    let arrS = s.split('');
    let vowels = ['a','e','i','o','u','A','E','I','O','U'];
    let low = 0;
    let hi = s.length -1;

    while (low < hi) {
        if (!vowels.includes(arrS[low]) && !vowels.includes(arrS[hi])) {
            low++;
            hi--;
        }else if (vowels.includes(arrS[low]) && !vowels.includes(arrS[hi])) {
            hi--;
        } else if (!vowels.includes(arrS[low]) && vowels.includes(arrS[hi])) {
            low++;
        } else if (vowels.includes(arrS[low]) && vowels.includes(arrS[hi])) {
            let temp = arrS[low];
            arrS[low] = arrS[hi];
            arrS[hi] = temp;
            low++;
            hi--;
        }
    }

    return arrS.join('');
};

투포인터 문제들은 항상 투포인터로 풀어야 한다는 생각이 안든다. 투포인터에 익숙해지고 싶다.

반응형