Задачка классическая и очень простая. Посему имеет смысл ее использовать только для совсем уж начинающих программистов.
Хотя меня как-то недавно тоже попросили ее решить
Задача
Развернуть строку символов. Как вариант, можно попросить развернуть массив.
Решение
Решений опять же много. Предлагаю все решения, где для разворота массива понадобился еще один массив считать незачётом. Можно это требование внести в условие, но, ИМХО, лучше посмотреть не предложит ли вдруг кандидат подобного решения и уже потом ввести это дополнительное ограничение. Единственным оправданием можно считать вопрос о том необходимо ли сохранить исходную строчку. Но это замечание не относится к Java, т.к. там придется выносить символы из строки в массив. И этот массив, очевидно, беречь нам ни к чему.
Краше всего на C/C++, где строчки — те же самые массивы. Будем использовать такую милую любому настоящему программисту на C арифметику указателей.
void reverseString(char *str)
{
int i = 0;
int len = strlen(str)-1;
for (; i <= len/2; i++)
{
char c = *(str+i);
*(str+i) = *(str+len-i);
*(str+len-i) = c;
}
}
На Java, как я говорил, выглядит менее элегантно, т.к. со строкой нельзя работать, как с массивом. И получатеся нечто вроде:
String reverseString(String s) {
char []str = s.toCharArray();
int len = str.length-1;
for (int i = 0; i <= len/2; i++) {
char c = str[i];
str[i] = str[len-i];
str[len-i] = c;
}
return new String(str);
}
А ограничение на используемые операции надо вводить?
String reverseString (String s) {
return new StringBuilder (string).reverse ().toString ();
}
Надо или не надо вводить такое ограничение — спорный вопрос.
С одной стороны нам надо решить задачу, а этим способом она несомненно решена.
С другой стороны, если очень хочется посмотреть именно реализацию, я бы такой ответ засчитал, но попросил бы написать еще и руками.
ООООО! Классика просто!
Где-то 20 лет назад решали с изворотами подобные простые, но хитрые алгоритмы
ЗЫ
Интересно сколько осталось человек,которые могут это решить
Лишнюю память используете =) Есть же классическое a^=b^=a^=b. В лоб, правда, не всякий компилер даст сделать, но вот в 3 строки обмен точно можно записать без буферной переменной.
Ну да, ну да. Можно и так. Но время выполнения будет больше.
Меня как то просили на собеседовании развернуть предложение, при этом пользоватся только этим же массивом. пример
вх: привет мир
вых: мир привет
Я решил ее так, сначала развернул весь массив символов, потом каждое слово разворачивал обратно.
[...] кандидатом, на должность тестера в нашу команду, задачу про разворот строчки, мне на ум пришло новое забавное решение этой [...]
А не проще ли посвильно сложить эту строку в стек, а зате также посимвольно вынуть.