句子逆序

題目描述

將一個英文語句以單詞爲單位逆序排放。例如「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--;
        }
    }
}
相關文章
相關標籤/搜索