[英]conditional changes behavior when converted to ternary operator?
我正在编写一个 function 比较字符串前半部分的元音数量并将其与后半部分进行比较,并根据数字是否相等返回 boolean。
例子:
Input: "book"
Output: true
因为bo | ok
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;
行,我正在检查我是否击中了字符串的中间。 这是一个简单的 boolean。 我把它改成了这个三元pastHalf = (i == length)? true: false;
pastHalf = (i == length)? true: false;
并且 output 对于测试用例Ieai
是错误的。 有谁知道为什么? 我相信这些陈述是等价的。
if (i == length) pastHalf = true;
绝对不一样
pastHalf = (i == length) ? true : false
在第一种情况下,仅当i
完全等于length
时才更改pastHalf
,因此当您迭代超过length
时, pastHalf
保持为true
。
第二,在每次迭代中, pastHalf
被重置,所以只有当i
完全等于length
时, pastHalf
为真。
其他改进:
length = (s.length()+1) % 2; // Think about this one carefully
和
if (set.contains(s.charAt(i)))
vowelCount += pastHalf ? -1 : +1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.