44.翻转单次顺序列
题目描述:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
算法思路:
先翻转整个句子,然后,依次翻转每个单词。 依据空格来确定单词的起始和终止位置
public class Solution {
public String ReverseSentence(String str) {
//trim去掉字符串两端的多余的空格,
if(str==null||str.length()==0||str.trim().length()==0){
return str;
}
int len=str.length();
char[] ch=str.toCharArray();
Reverse(ch,0,len-1);//翻转整个句子
//依次翻转每个单词。
//依据空格来确定单词的起始和终止位置
//注意:逐个单词翻转注意最后一个单次
for(int i=0,j=0;i<len;){//i设为每个单次开头,j设为每个单次后的空格位置
if(j<len&&ch[j]!=' '){//没有到达末尾或遇到空格
j++;
}
else{//遇到空格或者到末尾
Reverse(ch,i,j-1);
i=++j;
}
}
return new String(ch);
}
public void Reverse(char[] ch,int begin,int end){
while(begin<end){
char temp=ch[begin];
ch[begin]=ch[end];
ch[end]=temp;
begin++;
end--;
}
}
}