题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
在线代码:
public class Solution {
public String ReverseSentence(String str) {
char[] data=str.toCharArray();
if(data==null||data.length<1){
return String.valueOf(data);
}
//翻转整个句子
Reverse(data,0,data.length-1); //得到student. a am I
//翻转句子中的每个单词
int start=0;
int end=0;
while(start<data.length){
if(data[start]==' '){//开始是空则继续
start++;
end++;
}else if(end==data.length||data[end]==' '){
Reverse(data,start,end-1);//找到一个单词,然后进行翻转
end++;//end继续向右
start=end;//上一次的end给了start,下一个单词开始遍历
}else{
end++;//一直向右遍历,找到第一个单词的尾端是空字符的
}
}
return String.valueOf(data);
}
public void Reverse(char[] data,int start,int end){
if(data==null||start>end||start<0||end>data.length){
return;
}
while(start<end){
char temp=data[start];
data[start]=data[end];
data[end]=temp;//将句子中的前后字符进行交换
//继续向中间逼近
start++;
end--;
}
}
}