gpt4 book ai didi

java - 最大数量的连续元音

转载 作者:行者123 更新时间:2023-11-29 07:37:04 24 4
gpt4 key购买 nike

我正在尝试编写一个函数,它接受一个字符串并返回字符串中最大数量的连续等效元音。

这是我的尝试:

public static final String VOWELS = "aeiou";

public static int consecutiveVowelsInLine(String line) {
int longestVowels = 0;
int candidateLength = 0;
for (int i = 0; i < line.length() - 1; i++) {
if (isVowel(line.charAt(i))) {
if (line.charAt(i) == line.charAt(i+1)) {
candidateLength++;
}
} else {
candidateLength = 0;
}
longestVowels = Math.max(longestVowels, candidateLength);
}
return longestVowels;
}

public static boolean isVowel(char c) {
VOWELS.contains(c.toLowerCase());
}

问题是这不能处理 String 是一个元音字符的情况。因此,如果字符串只是 "a",我的代码将返回 0 而不是 1

如前所述,元音必须相同。

测试用例:

a    -> 1
b -> 0
ae -> 1
aeae -> 1
aab -> 2
aba -> 1
abee -> 2

最佳答案

我认为您的目标是在循环中做太多事情:与其查看下一个字符,不如专注于当前字符并保持状态以存储前一个元音:

public static int consecutiveVowelsInLine(String line) {
int longestVowels = 0;
int candidateLength = 0;
char vowel = 'b'; //b is not a vowel
for (int i = 0; i < line.length(); i++) {
char ci = line.charAt(i);
if (isVowel(ci)) {
if (ci == vowel) { //the same as the other one
candidateLength++;
} else {
candidateLength = 1;
}
vowel = ci;
} else {
candidateLength = 0;
vowel = 'b';
}
longestVowels = Math.max(longestVowels, candidateLength);
}
return longestVowels;
}

此处 vowel 存储您正在使用的当前元音序列。一开始我们使用 b,很简单,因为那不是元音。如果我们遇到元音,该元音存储在 vowel 中,我们相应地更新 candidateLength。如果我们遇到非元音字母,我们将元音字母设置回 b(或另一个非元音字母)。

演示:

您的 isVowel 方法也存在一些问题,可以找到带有一些测试用例的运行实现 here .

关于java - 最大数量的连续元音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34357718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com