这段代码适用于测试一个简单的回文,但我对其工作原理感到困惑。
我对 while 循环条件感到困惑,检查 if (left < right)
以及这如何自动意味着它不是回文。
left = 0;
right = i.length() -1;
while(i.charAt(left) == i.charAt(right) && right > left){
left++;
right--;
}
System.out.println();
if (left < right)
System.out.println ("That string is Not a palindrome.");
else
System.out.println("That string IS a palindrome");
最佳答案
while 循环基本上同时从相对侧开始遍历潜在的回文,并比较每一侧的字符。它正在检查是否(右>左),因为如果是,则意味着“右”和“左”计数器没有相互传递,因此没有到达(或传递)字符串的中间。 在此检查之后,它会向右递减(因此它会更接近字符串的中心)并递增“左”(出于相同的原因)。
最后,如果 'left' 仍然小于 'right',则意味着循环在 'left' 或 'right' 到达字符串中间之前停止,这是因为字符的条件相反索引上的匹配在某个阶段是错误的。
如果它们确实到达(或通过)中间,“左”将 >=“右”,这意味着字符匹配条件至少在字符串的中间为真,因此是回文。
关于java - 困惑这个回文测试是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156928/