-
[LeetCode] 1839. Longest Substring Of All Vowels in OrderLeetCode 2021. 10. 21. 00:39728x90
https://leetcode.com/problems/longest-substring-of-all-vowels-in-order/
Longest Substring Of All Vowels in Order - 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
Longest Substring Of All Vowels in Order

주어진 string에서 a,e,i,o,u 가 순서대로 나열되어있는 가장 긴 문자길이를 출력하는 문제이다.
무조건 a부터 시작해 e,i,o,u가 한 번씩은 나와야하며, 같은 문자가 연속으로 나와도 된다.
풀이는
먼저 l포인터과 r포인터를 만든다.
l=0 으로 초기화해주고,
l포인터는 a가 나올때까지 증가 시키고, r=l+1로 놔둔다.
target은 {'a', 'e', 'i', 'o', 'u', 'u'}로 알파벳이 이전과 같을때는 냅두고 타겟을 찾을때마다 바뀐다.
word[r] 이 target(다음 알파벳) 이거나 target 이전 문자(현재 알파벳)일 경우 r을 증가시킨다.
r 증가 전에, word[r]이 u일 경우엔 a,e,i,o,u가 모두 나온 경우이므로 최대길이를 업데이트 해준다.
target이나 target 이전이 아닐경우엔 l=r, target='a' 로 바꾸고 다시 a가 나올때까지 찾아주고 위 과정을 반복한다.
전체 풀이 코드
class Solution { public: int longestBeautifulSubstring(string word) { int l=0, r=0, M=0, a[10] = {'a','e','i','o','u','u'}, target=1; for (l=r; l<word.size() && word[l]!='a'; l++); r=l+1; while (r<word.size()) { if (word[r]==a[target] || word[r] == a[target-1]) { if (word[r]==a[target] && target<5) target++; if (word[r] == 'u') M=max(M,r-l+1); r++; } else { for (l=r; l<word.size() && word[l]!='a'; l++); r=l+1; target = 1; } } return M; } };'LeetCode' 카테고리의 다른 글