剑指offer_反转字符串顺序
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
题目应该有一个隐含条件,就是不能用额外的空间。虽然 Java 的题目输入参数为 String 类型,需要先创建一个字符 数组使得空间复杂度为 O(N),但是正确的参数类型应该和原书一样,为字符数组,并且只能使用该字符数组的空 间。任何使用了额外空间的解法在面试时都会大打折扣,包括递归解法。 正确的解法应该是和书上一样,先旋转每个单词,再旋转整个字符串。
1 public class Solution { 2 public String ReverseSentence(String str) { 3 int n = str.length(); 4 char ch[] = str.toCharArray(); 5 int i=0,j=0; 6 while(j<=n){ 7 if(j==n||ch[j]==' '){ 8 reserve(ch,i,j-1); 9 i=j+1; 10 } 11 j++; 12 } 13 reserve(ch,0,n-1); 14 return new String(ch); 15 } 16 17 public void reserve(char ch[],int i,int j){ 18 while(i<j){ 19 swap(ch,i,j); 20 i++;j--; 21 } 22 } 23 24 public void swap(char ch[],int i,int j){ 25 char temp = ch[i]; 26 ch[i] = ch[j]; 27 ch[j] = temp; 28 } 29 }

浙公网安备 33010602011771号