//注意:
// 题目应该有一个隐含条件,就是不能用额外的空间。
// 虽然 Java 的题目输入参数为 String 类型,需要先创建一个字符数组使得空间复杂度为 O(N),
// 但是正确的参数类型应该和原书一样,为字符数组,并且只能使用该字符数组的空间。
// 任何使用了额外空间的解法在面试时都会大打折扣
//思路:先旋转每个单词,在旋转整个字符数组
public String ReverseSentence(String str) {
char[] chs = str.toCharArray();
int N = chs.length;
//先翻转每个单词
int start=0;
int end=0;
while(end<=N){
if(end==N || chs[end]==' '){
reverse(chs,start,end-1);
start = end+1;
}
end++;
}
//再翻转整个字符串
reverse(chs,0,N-1);
return new String(chs);
}
private void reverse(char[] chs,int start,int end){
while (start<end){
char tmp = chs[start];
chs[start] = chs[end];
chs[end] = tmp;
start++;
end--;
}
}
www.mianshi.online,www.i9code.cn
本文由博客一文多发平台 OpenWrite 发布!