翻轉字串裡的單詞
題目描述:給你一個字串 s ,逐個翻轉字串中的所有 單詞 。
單詞 是由非空格字元組成的字串。s 中使用至少一個空格將字串中的 單詞 分隔開。
請你返回一個翻轉 s 中單詞順序並用單個空格相連的字串。
說明:
- 輸入字串 s 可以在前面、後面或者單詞間包含多餘的空格。
- 翻轉後單詞間應當僅用一個空格分隔。
- 翻轉後的字串中不應包含額外的空格。
示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:字串遍歷
首先,如果字串s是空串或者只由空格組成,則直接返回空串。
否則,首先將s去掉前後的空格,遍歷字串s,宣告一個單詞列表words用來記錄遍歷到的單詞,一個臨時辦理lastChar記錄上一個字元,lastChar初始化為空格,遍歷過程如下:
- 如果當前字元和上一個字元都是空格,則跳過處理下一個字元;
- 如果當前字元是空格而上一個字元不是空格,說明上一個字元是當前單詞的結束符號,將該單詞新增到單詞列表中;
- 如果當前字元不是空格而上一個字元是空格,說明當前字元是單詞的開始符號;
- 如果當前字元和上一個字元都不是空格,說明當前單詞並未結束。
遍歷結束後,將當前最後一個單詞新增到單詞列表words中,然後使用
Collections.reverse
方法將單詞列表words逆序排列,最後使用String.join(" ", words)
方法將單詞用空格分開連線起來並返回。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class LeetCode_151 {
public static String reverseWords(String s) {
if (s == null || s.length() == 0 || s.trim().length() == 0) {
return "";
}
List<String> words = new ArrayList<>();
s = s.trim();
StringBuilder curWord = new StringBuilder();
char lastChar = ' ';
for (int i = 0; i < s.length(); i++) {
char curChar = s.charAt(i);
if (curChar == ' ' && lastChar == ' ') {
// 如果當前字元和上一個字元都是空格,則跳過處理下一個字元
continue;
} else if (curChar == ' ' && lastChar != ' ') {
// 如果當前字元是空格而上一個字元不是空格,說明上一個字元是當前單詞的結束符號,將該單詞新增到單詞列表中
words.add(curWord.toString());
curWord = new StringBuilder();
lastChar = ' ';
} else if (curChar != ' ' && lastChar == ' ') {
// 如果當前字元不是空格而上一個字元是空格,說明當前字元是單詞的開始符號
curWord.append(curChar);
lastChar = curChar;
} else if (curChar != ' ' && lastChar != ' ') {
// 如果當前字元和上一個字元都不是空格,說明當前單詞並未結束
curWord.append(curChar);
lastChar = curChar;
}
}
words.add(curWord.toString());
Collections.reverse(words);
return String.join(" ", words);
}
public static void main(String[] args) {
// 測試用例,期望輸出結果:
// bob like even not does Alice
System.out.println(reverseWords(" Alice does not even like bob "));
}
}
【每日寄語】 做人要不斷的往前走,難免會跌倒但是要爬起來再跑,再跌倒再爬起來,做人就是這樣的。