“句子反转”这道题是小米的2017年校园招聘题。
题目:
句子反转
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。
比如: “hello xiao mi”-> “mi xiao hello”
输入值
输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)
输出值
对于每个测试示例,要求输出句子中单词反转后形成的句子
解决思路
首先,我们先认真审题,看看需要注意的地方:
1.时间限制:C/C++语言 1000MS;其他语言 3000MS;
2.内存限制:C/C++语言 65536KB;其他语言 589824KB
3.句子只包含字母和空格;
4.单词之间只有一个空格,前后没有空格;
5.目的:将句子中的单词位置反转,单词用空格分割。
6.输入值:输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符);
7.输出值:对于每个测试示例,要求输出句子中单词反转后形成的句子
理解完题目的意思后,我们会发现,这题的难点有几个,第一个是时间和内存的限制,第二个是如何将句子反转。我们做的第一步肯定先找出句子中的每个单词,然后再逆序输出单词即何。
/**
* 句子反转
*/
public class ReversalSentence {
public void reversalSentence(String[] sentences){
//遍历每个句子
for(int i = 0;i < sentences.length;i++){
// 按空格划分句子
Long tempMemory = Runtime.getRuntime().freeMemory();
String[] words = sentences[i].split(" ");
// 逆序拼接单词
String temp = "";
for(int j = words.length-1;j >= 0;--j){
temp += words[j];
if(j != 0)//最后一个单词后不需加空格
temp += " ";
}
sentences[i] = temp;
}
}
public static void main(String[] args) {
ReversalSentence rever = new ReversalSentence();
String[] sentences = {"hello xiao mi"};
rever.reversalSentence(sentences);
}
}