The challenge
The vowel substrings in the word codewarriors
are o,e,a,io
. The longest of these has a length of 2. Given a lowercase string that has alphabetic characters only (both vowels and consonants) and no spaces, return the length of the longest vowel substring. Vowels are any of aeiou
.
The solution in Java code
Option 1:
import static java.util.stream.Stream.of;
interface Solution {
static int solve(String s) {
return of(s.split("[^aeiou]")).mapToInt(String::length).max().orElse(0);
}
}
Option 2:
import java.util.ArrayList;
class Solution{
public static int solve(String s){
var vowels = new ArrayList<Character>();
vowels.add('a');
vowels.add('e');
vowels.add('i');
vowels.add('o');
vowels.add('u');
var arr = s.toCharArray();
int max = 0;
int counter = 0;
for (int i = 0; i < arr.length ; i++) {
if (vowels.contains(arr[i])){
counter++;
}else{
if (counter>max){
max = counter;
}
counter = 0;
}
}
if (counter>max){
max = counter;
}
return max;
}
}
Option 3:
class Solution{
public static int solve(String s){
//..
String[] vowelsTable = s.split("[bcdfghjklmnpqrstvwxyz]");
int longuestVowelSubString = 0;
for (String mySubString: vowelsTable){
if (mySubString.length()>longuestVowelSubString){
longuestVowelSubString = mySubString.length();
}
}
return longuestVowelSubString;
}
}
Test cases to validate our solution
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;
public class SolutionTest{
@Test
public void basicTests(){
assertEquals(3,Solution.solve("ultrarevolutionariees"));
assertEquals(2,Solution.solve("codewarriors"));
assertEquals(3,Solution.solve("suoidea"));
assertEquals(1,Solution.solve("strengthlessnesses"));
assertEquals(11,Solution.solve("mnopqriouaeiopqrstuvwxyuaeiouaeiou"));
}
}