44.翻转单词顺序列
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
题目解答
public class Solution { public String ReverseSentence(String str) { char[] chars=str.toCharArray(); StringBuilder res=new StringBuilder(); int length=chars.length; if(length<=0){ return res.toString(); } reverse(chars,0,length-1); int blank=-1; for(int i=0;i<length-1;i++){ if(chars[i]==' '){ int nextblank=i; reverse(chars,blank+1,nextblank-1); blank=nextblank; } } reverse(chars,blank+1,length-1); for(char c:chars){ res.append(c); } return res.toString(); } private void reverse(char[] chars,int low,int high){ char temp; while(low<high){ temp=chars[low]; chars[low]=chars[high]; chars[high]=temp; low++; high--; } } }
先翻转整个句子,再翻转单个单词