剑指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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章