java - 困惑这个回文测试是如何工作的

标签 java palindrome

这段代码适用于测试一个简单的回文,但我对其工作原理感到困惑。 我对 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/

相关文章:

java - 使用列表子集的组合生成列表,Java

java - 使用阻塞 API 时的 Java 异步编程

java - 数据在类之间无法正确传输;结果引发 NullPointerException

c++ - 打印给定范围内的所有回文数

c - C 语言中的一堆单词(回文句)

java - 为什么 Java 8 Streams 只能从 API 级别 24 开始使用?

java - Log4j 2 : How to add references from my classes in my log4j. 属性

regex - 使用perl在多个蛋白质序列中查找回文(完美回文)

c++ - 查找 C++ 中回文的数量

给定一个单词的算法返回从中删除成为回文字谜所需的最少字母数