牛客最近来了一个新员工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--;
}
}
}