Недавно я давал интервью в компании XXX, и меня попросили написать код, чтобы поменять слова во входных данных.
Ввод: «Меня зовут Джо»
Вывод: "yM eman si eoJ"
Я написал ниже код, который скомпилирован и успешно выполнен со всеми пройденными тестовыми примерами.
Ниже приведен мой код (используемый язык программирования - Java):
public String reverseWords(String s) {
StringBuilder sb = new StringBuilder();
s += ' ';
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) == ' ' && s.charAt(i-1) != ' ') {
if (sb.length()>0) sb.append(' ');
for (int j = i-1; j >= 0 && s.charAt(j) != ' '; j--) sb.append(s.charAt(j));
}
}
return sb.toString();
}
Затем интервьюер спросил со сложностью времени и пространства кода, на который я ответил: сложность пространства выглядит как O (N) (где N - количество символов на входе), а сложность времени - квадратичная. Интервьюер не выглядел удовлетворенным.
Какова будет временная и пространственная сложность приведенного выше кода? Кроме того, обратная связь с любым лучшим подходом была бы отличной. Заранее спасибо!