我理解charAt部分,但另一部分我遇到了一些麻烦。这段代码的其余部分可以一步一步向我解释,所以我更清楚地理解它。感谢
public static boolean y(String str) {
int i = 0;
int j = str.length()-1;
while (i != j && (j - i) != 1) {
if (str.charAt(i) != str.charAt(j))
{
return false;
}
i++;
j--;
}
return true;
}
opps我发了一个错误,而while语句假设是这个>> while(i!= j&&(j - 1)!= 1)
答案 0 :(得分:5)
代码将确定str
是否为回文。
i
将表示从字符串的开头到中间的每个字符。 j
将表示从字符串的结尾到中间的每个字符。
通过将值设置为0(第一个字符)来初始化i
。 j
初始化为字符串的长度减去1(最后一个字符)。
然后,您的代码会循环播放,比较i
和j
代表的字符,直到它们不匹配为止,或者直到没有字符可供比较。
例如,鉴于回文“雷达”,代码可以比较:
然后终止。在奇长的回文中,显然不需要比较中间字符,因此i != j
语句中的while
。
处理均匀长度的回文时,代码中存在问题。 i
和j
会交叉,但永远不会相同。第二个条款(j - i) != 1
似乎是为了解决这个问题而设计的,但它很快就会进行比较!
鉴于回文“pullup”,当i
为2且j
为3(即两个Ls)时,您将退出循环而不进行比较。这意味着当它应该返回false时,非回文偶数单词将返回true。
如果将整个where
子句更改为:
where (j - i > 0)
您的代码适用于所有情况。
答案 1 :(得分:1)
它将字符串(位置i)的开头与字符串的结尾(位置j)进行比较,然后遍历到下一对字符(i + 1,j - 1),直到它到达字符串的中间位置,看看String是否是回文。