今天是2020年4月10日,每日一題的第六天。
題目描述
給定一個字符串,逐個翻轉字符串中的每個單詞。
示例 1:
輸入: "the sky is blue"
輸出: "blue is sky the"
示例 2:
輸入: " hello world! "
輸出: "world! hello"
解釋: 輸入字符串可以在前面或者後面包含多餘的空格,但是反轉後的字符不能包括。
示例 3:
輸入: "a good example"
輸出: "example good a"
解釋: 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
說明:
無空格字符構成一個單詞。
輸入字符串可以在前面或者後面包含多餘的空格,但是反轉後的字符不能包括。
如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
題目分析
在Java中有分隔字符串的函數split,可以以空格作爲分割,在從後向前依次追加,需要注意,在追加過程後,某一個分割得到的元素可能爲空格(空白元素),這樣的元素不能進行追加。在分隔字符串時,同樣可以採用正則表達式,來將空格識別,將多個空格替換爲一個空格,在使用split進行分割。
參考代碼
public class ReverseWords {
public String reverseWords(String s) {
if (s.isEmpty()) {
return "";
}
// 這裏可以使用正則表達式將多個空格替換爲一個空格
// String[] split = Pattern.compile("\\s+").matcher(s).replaceAll(" ").split(" ");
String[] strings = s.split(" ");
StringBuilder stringBuilder = new StringBuilder();
boolean first = true;
for (int i = strings.length - 1; i >= 0; i--) {
if (!strings[i].isEmpty()) {
stringBuilder.append(first ? "" : " ").append(strings[i]);
first = false;
}
}
return stringBuilder.toString();
}
}