字符串翻轉

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

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

    /**
     * 字符串翻轉
     * 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。爲簡單起見,標點符號和普通字母同樣處理。例如輸入「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:建立一個字符數組,逆序遍歷整個字符串,依次將掃描到的單詞(遇到空格)存放到字符數組中code

    /**
     * 字符串翻轉
     * 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。爲簡單起見,標點符號和普通字母同樣處理。例如輸入「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);
    }
相關文章
相關標籤/搜索