题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
全部单词之间用一个空格隔开,语句中除了英文字母外,再也不包含其余字符
输入描述
将一个英文语句以单词为单位逆序排放。
输出描述
获得逆序的句子
输入例子
I am a boy
输出例子
boy a am I
算法实现
import java.util.Scanner;
/**
* All Rights Reserved !!!
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String input = scanner.nextLine();
System.out.println(reverseSentence(input));
}
scanner.close();
}
private static String reverseSentence(String str) {
char[] chars = str.toCharArray();
// 翻转整个句子
reverse(chars, 0, chars.length - 1);
for (int i = 0, j; i < chars.length; i = j + 1) {
// 找从i位置开始后的第一个非空白字符
while (i < chars.length && chars[i] ==' ' ) {
i++;
}
j = i + 1;
// 找i位置以后的第一个空白字符
while (j < chars.length && chars[j] != ' ') {
j++;
}
reverse(chars, i, j - 1);
}
return new String(chars);
}
/**
* 字符数组翻转
* @param str
* @param start
* @param end
*/
private static void reverse(char[] str, int start, int end) {
char tmp;
while (start < end) {
tmp = str[start];
str[start] = str[end];
str[end] = tmp;
start++;
end--;
}
}
}