Проблема в том, что reverse()
изменяет сам StringBuilder
. Итак, вы сравниваете обратное с обратным. Вместо этого измените свой метод на:
String x = sb.toString();
return sb.reverse().toString().equals(x);
Что будет сравнивать StringBuilder
перед реверсом с реверсированным StringBuilder
. Обратите внимание, что if(sb.length == 0)
не требуется, так как если он пуст, sb.reverse().toString().equals(x)
все равно вернет true.
Также ваш поиск чувствителен к регистру, когда в заявлении о проблеме говорится, что он должен совпадать независимо от регистра. Измените, где вы добавляете:
if (Character.isLetter(s.charAt(i))) {
sb.append(Character.toLowerCase(s.charAt(i)));
}
Также вы можете воспользоваться replaceAll
и toLowerCase()
, чтобы сократить ваш метод до:
public static boolean pali(String s) {
String copy = s.toLowerCase().replaceAll("[^a-z]", "");
return new StringBuilder(copy).reverse().toString().equals(copy);
}