文章出處

題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入“It's a good day.”,則輸出“day. good a It's”

思路1:先翻轉整個字符串,然后從首字母開始,每掃描一個單詞(遇到空格),翻轉一個單詞

    /**
     * 字符串翻轉
     * 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入“It's a good day.”,則輸出“day. good a It's”
     * 思路:先翻轉整個字符串,然后從首字母開始,每掃描一個單詞(遇到空格),翻轉一個單詞
     *
     * @param input
     * @return
     */
    public String reverse(String input) {
        char[] output = input.toCharArray();
        reverse(output, 0, output.length);

        int i = 0;
        for (int j = 0; j < output.length; j++) {
            if (output[j] == ' ') {
                reverse(output, i, j);
                i = j + 1;
            }
        }
        reverse(output, i, output.length);
        //reverse(output, , output.length);

        return String.valueOf(output);
    }

    /**
     * 翻轉整個字符數組
     *
     * @param input
     * @param begin
     * @param end
     */
    private void reverse(char[] input, int begin, int end) {
        if (begin == end) return;
        while (begin < --end) {
            char c = input[begin];
            input[begin] = input[end];
            input[end] = c;
            begin++;
        }
    }

思路2:創建一個字符數組,逆序遍歷整個字符串,依次將掃描到的單詞(遇到空格)存放到字符數組中

    /**
     * 字符串翻轉
     * 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入“It's a good day.”,則輸出“day. good a It's”
     * 思路:創建一個字符數組,逆序遍歷整個字符串,依次存將掃描到的單詞(遇到空格)存放到字符數組中
     * @param input
     * @return
     */
    public String Reverse(String input) {
        int current = 0;
        char[] output = new char[input.length()];
        char[] chars = input.toCharArray();

        int begin;
        int end = chars.length;
        for (int i = chars.length - 1; i >= 0; i--) {
            if (chars[i] == ' ') {
                begin = i + 1;
                while (begin < end) {
                    output[current++] = chars[begin++];
                }
                output[current++] = ' ';
                end = i;
            }
        }

        begin = 0;
        while (begin < end) {
            output[current++] = chars[begin++];
        }

        return String.valueOf(output);
    }

 

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()