Итак, я предполагаю, что вы изучаете / практикуете java и что существует большой риск вопроса о домашнем задании ... Это означает, что вы или любите, или ненавидите этот ответ ...
Если вы посмотрите на исходный код объекта String, вы найдете что-то вроде этого внутри:
private final char value[]; //this stores the String's characters
Первый шаг - получить значение [] с помощью:
char[] myChars = str.toCharArray();
Обратите внимание на реализацию функции (из openjdk-7 ), она возвращает копию массива, а не исходную, поскольку объекты String являются неизменяемыми.
public char[] toCharArray() {
char result[] = new char[count];
getChars(0, count, result, 0); //Calls System.arraycopy(...)
return result;
}
Теперь, когда у нас есть myChars
, мы можем поиграть с ним и получить результат за линейное время O (n)!
public static String reverseWordByWord(String str) {
char[] myChars = str.toCharArray();
int stringLen = myChars.length;
int left = 0, right = 0;
for(int index = 0; index < stringLen; index++) {
if(chars[index] == ' ') {
//assign right
reverse(chars, left, right);
//update left
}
}
//Don't forget to handle the boundary case (last word in the String)!
}
А вот функция реверс :
private static void reverse(char[] chars, int left, int right) {
while(left < right) {
//Would you know how to swap 2 chars without using a "char tmp" variable? ;)
//Update left and right
}
}
Теперь просто ради интереса вы можете попытаться перейти к следующему выводу, и, возможно, вы получите этот точный вопрос от какого-то интервьюера, который однажды выдохся:
world new brave hello