面試題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();
}
}