Ваша логика будет работать только в том случае, если длина входной строки является нечетным числом, то есть 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--;
}
Это в конечном итоге приведет к StringIndexOutOfBoundsException, когдаi достигает отрицательного значения, а j достигает значения, превышающего длину строки.
Попробуйте следующий код:
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;
}