## 1839. Longest Substring Of All Vowels in Order

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'`.

## Rust Solution

``````struct Solution;

impl Solution {
fn longest_beautiful_substring(word: String) -> i32 {
let word: Vec<char> = word.chars().collect();
let vowels: Vec<char> = vec!['a', 'e', 'i', 'o', 'u'];
let mut start = 0;
let n = word.len();
let mut res = 0;
'outer: while start < n {
while start < n && word[start] != 'a' {
start += 1;
}
let mut end = start;
for i in 0..5 {
if !(end < n && word[end] == vowels[i]) {
start = end;
continue 'outer;
}
while end < n && word[end] == vowels[i] {
end += 1;
}
}
res = res.max(end - start);
start = end;
}
res as i32
}
}

#[test]
fn test() {
let word = "aeiaaioaaaaeiiiiouuuooaauuaeiu".to_string();
let res = 13;
assert_eq!(Solution::longest_beautiful_substring(word), res);
let word = "aeeeiiiioooauuuaeiou".to_string();
let res = 5;
assert_eq!(Solution::longest_beautiful_substring(word), res);
let word = "a".to_string();
let res = 0;
assert_eq!(Solution::longest_beautiful_substring(word), res);
}
``````

Having problems with this solution? Click here to submit an issue on github.