目录
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
特殊输入
- 输入空字符串;
- 只含有空格的字符串;
解题思路
- 1、面试第一反应:全翻转 + 单词内部翻转,参考书上代码
即:I am a student. --> .tenduts a ma I --> students. a am I
- 2、使用String类的split函数,字符串和字符数组之间的转换。
参考解题
public class Solution {
// 方法1,调用String 类的spilt函数
public String ReverseSentence(String str) {
// 异常
if(str == null || str.trim().equals("") ){
// 注:trim(), 返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。
return str;
}
// 按照单词划分,原字符串->字符数组
String[] splitStrings = str.split(" ");
// 划分后,按照逆序储存到reverseSplit
StringBuffer reverseSplit = new StringBuffer();
for(int i = splitStrings.length - 1; i >=0; --i){
if(i == 0){
reverseSplit.append(splitStrings[i]);
}else{
reverseSplit.append(splitStrings[i]);
reverseSplit.append(" ");
}
}
// 字符数组 - > 字符串
String resultStr = reverseSplit.toString();
return resultStr;
}
}