题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
方法一
看到这道题感觉不是很难,我的第一想法是通过字符串分割成数组,然后反向拼接数组中的值,然后就得到了反向的顺序。
public String ReverseSentence(String str) {
if(str.trim().equals("")){
return str;
}
String[] a = str.split(" ");
StringBuffer o = new StringBuffer();
int i;
for (i = a.length; i >0;i--){
o.append(a[i-1]);
if(i > 1){
o.append(" ");
}
}
return o.toString();
}
方法二
依次从前往后一直读取,设置一个变量用来缓存读取的字符串,遇到空格之后就把之前读取到的压到结果的前面并添加上空格。最后当循环结束,如果那个用来读取的字符串不为空,那么就再把它压到结果前,这次就不用再结果的最前面加空格了。相比于第一个方法来说,这个方法的空间复杂度比较小。
public String ReverseSentence_2(String str) {
String res = "", tmp = "";
for (int i = 0; i < str.length(); i++) {
if(str.charAt(i) == ' ') {
res = " " + tmp + res;
tmp = "";
}
else {
tmp += str.charAt(i);
}
}
if(tmp.length() > 0) {
res = tmp + res;
}
return res;
}