Я пытаюсь решить эту проблему из CodingBat, но не понимаю, почему она не работает с входной строкой «Привет!».
Это мой код, а под ним - результаты, которые я получаю.
public String sameEnds(String string) {
String result;
int strLen = string.length();
boolean isOdd = (strLen % 2 != 0);
String start = string.substring(0, strLen / 2);
String end;
if (isOdd) {
end = string.substring(strLen / 2 + 1);
} else {
end = string.substring(strLen / 2);
}
int i = 0;
while (!start.equals(end) && i <= start.length()) {
start = start.substring(0, start.length() - i);
end = end.substring(i, end.length());
i++;
}
if (start.equals(end)) {
result = start;
} else {
result = "";
}
return result;
}
Ваша проблема в том, что вы одновременно увеличиваете i
и используете start.length()-i
. Когда i
равно 1, start
переменная становится на один символ короче. Но когда i
равно 2, start.length()
это уже на единицу меньше оригинала, и теперь вы вычитаете 2 символа, так что теперь вы пропустили один. То же самое и с end
переменной. Не используйте одновременно увеличение i
и изменение длины строк.
Чтобы исправить это, не меняйте оригинал start
и end
переменные. Сделайте что-нибудь вроде этого:
String sTmp = start;
String eTmp = end;
while (!sTmp.equals(eTmp) && i <= start.length()) {
sTmp = start.substring(0, start.length() - i);
eTmp = end.substring(i, end.length());
i++;
}
if (sTmp.equals(eTmp)) {
result = sTmp;
} else {
result = "";
}
return result;
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения