劍指offer 58_翻轉單詞順序(java)

面試題58 - I. 翻轉單詞順序

輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。爲簡單起見,標點符號和普通字母一樣處理。例如輸入字符串"I am a student. “,則輸出"student. a am I”。

方法1. 兩次翻轉

import java.lang.StringBuilder;
public class Solution {
    public String ReverseSentence(String str) {
        //  " "?首位如果時空格怎麼處理??
        if(str.length() <=0) return "";
        // 第一次全部統一翻轉。
        StringBuilder s1 = new StringBuilder(str.trim());
        s1.reverse();
        // 記錄前一次翻轉後的新單詞的位置。
        int low = 0; 
        StringBuilder res = new StringBuilder();
        // 記錄空格數
        int count = 0;
        // 逐步遍歷反轉後的字符串,
        for(int i = 0; i < s1.length(); i++){
            // 如果遍歷到空格,說明[low, i)是一個完整的單詞,執行翻轉後就回到正常單詞。
            if(s1.charAt(i) == ' ' && (i != s1.length()-1)){
                count++;
                StringBuilder s2 = new StringBuilder(s1.substring(low, i));
                res.append(s2.reverse().toString() + " ");
                low = i+1; // 越過空格
            }
            // 如果count不爲0,說明該字符串包含多個單詞,那麼最後一個完整的單詞後面不再加空格。
            if(count != 0 && i == s1.length()-1){
                StringBuilder s3 = new StringBuilder(s1.substring(low, i+1));
                res.append(s3.reverse());
            }
        }
        // 說明該字符串只含有一個完整的單詞,直接返回原來的單詞。
        if(count == 0){
            return str;
        }
        // 需要把StringBuilder變爲String。
        return res.toString();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章