牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
解析:两种方法:
①由后向前加String
②滑动窗口,依次翻转
代码:
①
public class Solution { public String ReverseSentence(String str) { if(str.trim().length() <= 0) return str; String[] strArr = str.split(" "); String res = ""; for(int i = strArr.length - 1; i >= 0; i--){ if(i != 0){ res += strArr[i] + " "; }else{ res += strArr[i]; } } return res; } }
②
student. a am I -----> 第一次翻转: I ma a .stneduts --------->接下来的翻转(每次翻转一个单词):I am a students.
public class Solution { public String ReverseSentence(String str) { if(str.trim().length() <= 0) return str; char[] chars = str.toCharArray(); reverseChars(chars, 0, str.length()-1); int l = 0; int r = 0; while(l < str.length()){ if(chars[r] == ' '){ reverseChars(chars, l, r-1); r++; l = r; } if(r == str.length() - 1){ reverseChars(chars, l, r); break; } r++; } return String.valueOf(chars); } public void reverseChars(char[] chars, int l, int r){ while(l < r){ char temp = chars[l]; chars[l] = chars[r]; chars[r] = temp; l++; r--; } } }