什么可能导致这个特定的回文逻辑错误

时间:2018-12-19 06:23:43

标签: java string palindrome

编写以下方法来确定其String参数是否从左到右和从右到左读取相同(即所谓的回文)。我很难找到此回文的逻辑错误。我相信错误是整个循环中的两个条件会影响检查字符串中的字符。如果我错了,请纠正我,以便提出正确的解决方案。

enter image description here

对于你们中的许多人来说这可能是一个愚蠢的问题,但是我对Java编程还是陌生的,如果可以的话,这是书面问题,不是实际代码。

3 个答案:

答案 0 :(得分:1)

仅当输入字符串的长度为奇数(即1,3,5等)时,您的逻辑才会起作用。 因为如果长度是偶数,我将永远不会等于j。字符串“ abba”的示例:

while (i == j && S.charAt(i) == S.charAt(j)) { // i = 0, j = 3
        i++;
        j--;
    }

iteration-2:

while (i <= j && S.charAt(i) == S.charAt(j)) { // i = 1 , j = 2
        i++;
        j--;
    }

iteration-3:

while (i <= j && S.charAt(i) == S.charAt(j)) { // i = 2 , j = 1
            i++;
            j--;
        }

当我达到负值并且j达到大于字符串长度的值时,这最终将导致StringIndexOutOfBoundsException。

尝试以下代码:

  static boolean isPalidrome(String s) {
    int i = 0;
    int j = s.length() - 1;

    while( i <= j && s.charAt(i) == s.charAt(j)) {
      i ++;
      j--;
    }
    return i >= j;
  }

答案 1 :(得分:0)

如果输入字符串是“ zz”或“ xxxx”之类的字符,则您的代码将失败,这意味着即使是相同字符的长度也是如此,因此理想情况下,您可以尝试使用以下内容:

public static boolean isPal(String str) {
        int start = 0;
        int end = str.length() - 1;
        while (start < end) {
            final char f = str.charAt(start++);
            final char b = str.charAt(end--);
            if (f != b) {
                return false;
            }
        }
        return true;
    }

答案 2 :(得分:0)

您可以在自己的代码中应用以下更改。 while循环的终止条件(即i <= j和返回条件(i >= j)

基本上有两个变化
public static boolean isPalindrome(String S) {
    int i = 0, j = S.length() - 1;
    while (i <= j && S.charAt(i) == S.charAt(j)) {
        i++;
        j--;
    }
    return (i >= j);
}