我正在编写一个函数,它比较字符串前半部分的元音数,并将其与后半部分进行比较,然后根据数字是否相等返回一个布尔值。
例子:
Input: "book"
Output: true
因为 bo | ok
, numVowels = 1
两半各一个“o”。
我的代码在这里
class Solution {
public boolean halvesAreAlike(String s) {
Set<Character> set = new HashSet<>(Arrays.asList('a','e','i','o','u','A','E','I','O','U'));
int vowelCount = 0, length = (s.length()%2 == 0) ? s.length()/2 : s.length()/2+1;
boolean pastHalf = false;
for (int i = 0; i < s.length(); i++) {
if (i == length) pastHalf = true;
if (pastHalf && set.contains(s.charAt(i))) vowelCount--;
else if (!pastHalf && set.contains(s.charAt(i))) vowelCount++;
}
return vowelCount == 0;
}
}
在 if (i == length) pastHalf = true;
线,我正在检查我是否击中了线的中间。这是一个简单的布尔值。我把它改成这个 pastHalf = (i == length) ? true : false;
测试用例的输出是错误的 Ieai
. 有人知道为什么吗?我相信这些说法是等价的。
1条答案
按热度按时间xwmevbvl1#
绝对不一样
在第一种情况下,
pastHalf
只有当i
完全等于length
,所以当您在length
,pastHalf
遗骸true
.在第二种情况下,每次迭代
pastHalf
重置了,所以pastHalf
只有当i
完全等于length
.其他改进:
和