1839. Longest Substring Of All Vowels in Order
Description
A string is considered beautiful if it satisfies the following conditions:
- Each of the 5 English vowels (
'a'
,'e'
,'i'
,'o'
,'u'
) must appear at least once in it. - The letters must be sorted in alphabetical order (i.e. all
'a'
s before'e'
s, all'e'
s before'i'
s, etc.).
For example, strings "aeiou"
and "aaaaaaeiiiioou"
are considered beautiful, but "uaeio"
, "aeoiu"
, and "aaaeeeooo"
are not beautiful.
Given a string word
consisting of English vowels, return the length of the longest beautiful substring of word
. If no such substring exists, return 0
.
A substring is a contiguous sequence of characters in a string.
Example 1:
Input: word = "aeiaaioaaaaeiiiiouuuooaauuaeiu" Output: 13 Explanation: The longest beautiful substring in word is "aaaaeiiiiouuu" of length 13.
Example 2:
Input: word = "aeeeiiiioooauuuaeiou" Output: 5 Explanation: The longest beautiful substring in word is "aeiou" of length 5.
Example 3:
Input: word = "a" Output: 0 Explanation: There is no beautiful substring, so return 0.
Constraints:
1 <= word.length <= 5 * 105
word
consists of characters'a'
,'e'
,'i'
,'o'
, and'u'
.
Solution
longest-substring-of-all-vowels-in-order.py
class Solution:
def longestBeautifulSubstring(self, word: str) -> int:
if "a" not in word: return 0
v = ["a", "e", "i", "o", "u"]
vi = 0
n = len(word)
curr = res = 0
i = j = word.index("a")
while j < n and word[j] == "a":
j += 1
vi += 1
while i < n and j < n:
if word[j] != v[vi]:
vi = 0
i = j
while j < n and word[j] != v[vi]:
j += 1
i = j
if j >= n: return res
while j < n and word[j] == v[vi]:
j += 1
vi += 1
if vi == 5:
res = max(res, j - i)
vi = 0
i = j
return res