题目:
Input:
"I am a student."
Output:
"student. a am I"
这道题用辅助结构很简单,现在要求空间复杂度为O(1),具体的思路是先局部翻转,再整体翻转。局部翻转的关键是使用一个指针j来找空格的位置,找到后就翻转之前的单词。重复此过程,然后是整体翻转。
public String ReverseSentence(String str) {
if(str==null||str.length()==0){
return "";
}
int i=0,j=0;
int n=str.length();
char[] ch=str.toCharArray();
//反转部分
while(j<=n){
//为什么是j==n?因为反转的是j-1,等于n反转的是它的前一个字符
if(j==n||ch[j]==' '){
reverse(ch,i,j-1);
i=j+1;
}
j++;
}
//反转整体
reverse(ch,0,n-1);
return String.valueOf(ch);
}
public void reverse(char[]ch,int i,int j){
while(i<j){
swap(ch,i++,j--);
}
}
public void swap(char[] ch,int i,int j){
char temp=ch[i];
ch[i]=ch[j];
ch[j]=temp;
}
}