题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路:
先全部翻转,如i am students.-->.stneduts ma i ,然后再局部翻转,遇到空格就翻转这个单词。
代码:
public class Solution {
public String ReverseSentence(String str) {
if(str==null ||str.length()==0) return str; //不能返回null
//先转换为char,然后全部翻转
char[] s=str.toCharArray();
rev(s,0,s.length-1);
//局部翻转
int l=0;
int r=0;
while(l<s.length){
if(s[r]==' '){
rev(s,l,r-1);
//跳过空格继续遍历下一单词
r++;
l=r;
}
//到了最后,翻转完就break,要不然r就越界了
if(r==s.length-1){
rev(s,l,r);
break;
}
++r;
}
return String.valueOf(s);
}
public void rev(char[] s,int l,int r){
while(l<r){
char temp=s[l];
s[l]=s[r];
s[r]=temp;
l++;
r--;
}
}
}
来源:oschina
链接:https://my.oschina.net/u/4527334/blog/4329631