翻轉字符串裏的單詞
題目描述:給你一個字符串 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 "));
}
}
【每日寄語】 做人要不斷的往前走,難免會跌倒但是要爬起來再跑,再跌倒再爬起來,做人就是這樣的。