Ты рядом. Ниже мое решение проблемы, а именно: верните true, если и только если мы можем поменять две буквы в A так, чтобы результат равнялся B Пояснения после кода.
public boolean buddyStrings(String s1, String s2) {
boolean result = false;
if (s1 != null && s2 != null) {
char[] letters1 = s1.toCharArray();
char[] letters2 = s2.toCharArray();
if (letters1.length == letters2.length && letters1.length > 1) {
int[] indices = new int[2];
int index = 0;
for (int i = 0; i < letters1.length; i++) {
if (letters1[i] != letters2[i]) {
if (index < 2) {
indices[index++] = i;
}
else {
index++;
break;
}
}
}
if (index == 2) {
result = letters1[indices[0]] == letters2[indices[1]];
}
}
}
return result;
}
Во-первых Как и в вашем коде, длина обеих строк должна быть одинаковой, а длина должна быть больше 1 (одной), поскольку нельзя заменить две буквы в строке, если строка содержит только одну букву.
Теперь мы проверяем соответствующие буквы в каждой строке и сохраняем индексы соответствующих букв, которые отличаются. Например, для ваших тестовых строк индексы будут 7 и 8. Таких индексов должно быть ровно два. Поэтому я сохраняю индексы в массиве int размером 2.
После проверки всех букв должно быть ровно две разные буквы. Осталось только проверить, что если мы поменяем две буквы, две строки будут идентичны.