#java #string #algorithm #testing #substring
Вопрос:
Вопрос: Учитывая строку a, найдите количество подсегментов строки, содержащих по крайней мере одну гласную И одну согласную. Например : ввод «синий» будет иметь количество подстрок = 1, «хакерранк» вернет количество сегментов = 3 («ха»,»cker»,»ранг»), каждый из которых будет содержать по крайней мере одну согласную и одну гласную.
Вот мой код на Java
public static int segments(String password){
int numbersegments = 0;
int vowel = 0;
int consonant = 0;
for(int index = 0; index < password.length();index ){
if(password.charAt(index) == 'a' || password.charAt(index) == 'e' ||
password.charAt(index) == 'i' || password.charAt(index) == 'u'
|| password.charAt(index) == 'o' ){
vowel ;
}
else
consonant ;
if(vowel >= 1 amp;amp; consonant >= 1){
numbersegments ;
vowel = 0;
consonant = 0;
}
}
return numbersegments;
}
Я запускаю тестовые примеры с приведенным выше кодом, и он показывает, что 5 из 15 выходов являются правильными. К сожалению, я не вижу входных данных для этих неправильных тестов, поэтому я никак не могу увидеть недостающую логику для моего кода выше, чтобы он выполнялся на 100% правильно во всех случаях. Может быть, я не принял во внимание некоторые крайние случаи, но я не могу придумать ни одного. Есть ли какой-либо изъян в моем коде выше ? Есть ли какие-либо пропущенные случаи, которые я забываю принять во внимание ? Спасибо
Комментарии:
1. @kungho вы не приняли во внимание заглавные буквы, специальные символы и цифры. вы проверяете только гласные со строчными буквами. так что «синий», например, не работает
Ответ №1:
Попробуйте это, я думаю, это сработает
public static int segments(String password){
int numbersegments = 0;
int vowel = 0;
int consonant = 0;
password = password.toLowerCase();
for(int index = 0; index < password.length();index ){
if(password.charAt(index) == 'a' || password.charAt(index) == 'e' ||
password.charAt(index) == 'i' || password.charAt(index) == 'u'
|| password.charAt(index) == 'o' ){
vowel ;
}
else if(password.charAt(index)>='a' amp;amp; password.charAt(index)<='z')
consonant ;
if(vowel >= 1 amp;amp; consonant >= 1){
numbersegments ;
vowel = 0;
consonant = 0;
}
}
return numbersegments;
}
Вы не приняли во внимание заглавные буквы, специальные символы и цифры. вы проверяете только гласные со строчными буквами.
Комментарии:
1. Да, я должен был принять во внимание заглавную букву, но как учет специальных символов и цифр изменит логику моего кода, поскольку мой цикл for не исключал ни одного из них, когда я проверял условие
2. «a1» не соответствует вашим условиям, но он вернет 1 из вашей функции.