博客 / 詳情

返回

LeetCode-151-翻轉字符串裏的單詞

翻轉字符串裏的單詞

題目描述:給你一個字符串 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   "));
    }
}
【每日寄語】 做人要不斷的往前走,難免會跌倒但是要爬起來再跑,再跌倒再爬起來,做人就是這樣的。
user avatar huangjuyuan 頭像 monday_pro 頭像 xiaofeixiang_63ec941cad48a 頭像 bianchengshijie 頭像 changqingdezi 頭像
5 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.