题目描述
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点 符号和普通字母一样处理。例如输入字符串“I am a student.”,则输出”student. a am I”。并尽可能减少空间消耗。
Java代码实现
public class ReverseSentence {
public static void main(String[] args){
String s = "I am a student.";
System.out.println(sentenceReverse(s));
}
public static void swap(char[] arr, int begin, int end){
while(begin < end){
char tmp = arr[begin];
arr[begin] = arr[end];
arr[end] = tmp;
begin++;
end--;
}
}
public static String sentenceReverse(String s){
char[] array = s.toCharArray();
//先翻转整个句子
swap(array, 0, array.length -1);
int begin = 0;
//再翻转每个单词
for(int i = 0; i < array.length -1 ; ++i)
{
if(array[i] == ' ')
{
swap(array, begin, i -1);
begin = i+1;
}
}
swap(array, begin, array.length -1); //反转最后一个单词
return String.valueOf(array);
}
}