【发布时间】:2014-11-24 09:53:14
【问题描述】:
我参加了一次技术面试,被问到以下问题:
编写一个函数,接收一个句子并以相反的顺序返回包含单词的句子(即“hello world”变为“world hello”)。
这是我在 Java 中给出的解决方案:
/** Takes a sentence as an input and returns the sentence with the words in
* reversed order. */
private static String reverseSentence(String sentence) {
String[] words = sentence.split("\\s+");
String reversedString = "";
for (int k = words.length - 1; k >= 0; k -= 1) {
reversedString += " " + words[k];
}
return reversedString.substring(1);
}
我开始思考必须有比这更有效的方法来解决这个问题。如果这个解决方案被证明是最好的并且没有比它更高效/更优雅的解决方案,我认为在*公司的技术面试中不会问这个问题。
谁能想到更好的方法来做到这一点?
【问题讨论】:
-
是的。使用
StringBuilder而不是String reversedString。字符串连接(尤其是在循环中)效率不高。 -
有一个
Collections.reverse方法:docs.oracle.com/javase/7/docs/api/java/util/… 你应该可以使用它。 -
如果你好
世界呢?如果我的字符串只包含一个空格怎么办?虽然我不是那里的面试官,但他们肯定会寻找异常/边缘案例处理。 -
是的,但是当你倒车时你会回来 \t 吗?
-
在深入研究答案之前总是询问用例。通常在速度和可维护性之间进行权衡。