1

我理解 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)

4

2 回答 2

5

该代码将确定是否str是回文。

i将表示从字符串开头到中间的每个字符。 j将表示从字符串末尾到中间的每个字符。

i通过将值设置为 0(第一个字符)来进行 初始化。j初始化为字符串的长度减 1(最后一个字符)。

然后您的代码循环,比较由i和表示的字符,j直到它们不匹配,或者直到没有字符可供比较。

例如,给定回文“radar”,代码可以比较:

  • r 与 r
  • 一个与一个

然后终止。在奇数长度的回文中,显然不需要比较中间字符,因此i != j在你的while陈述中。

在处理偶数长度回文时,您的代码存在问题。 i并且j会交叉,但永远不会相同。第二个子句 ,(j - i) != 1似乎旨在解决这个问题,但它使比较过早!

给定回文数,“pullup”,当i是 2 和j3(即都是 Ls)时,您将退出循环而不进行比较。这意味着一个非回文偶数词将返回真,而它应该返回假。

如果将整个where子句更改为:

where (j - i > 0)

您的代码适用于所有情况。

于 2012-10-01T07:38:13.360 回答
1

它将字符串的开头(位置 i)与字符串的结尾(位置 j)进行比较,然后遍历到下一对字符 (i + 1, j - 1) 直到到达字符串的中间,看看如果字符串是回文。

于 2012-10-01T07:38:09.303 回答