Description

給定字串 s,包含英文字母和空格,回傳最後一個單字的長度。

Example:

Input: s = “Hello World” Output: 5

Intuition#

核心思路:從字串末尾開始,跳過尾部空格後,計算最後一個單字的長度。

  • 注意字串尾部可能有多個空格,需要先跳過
  • 從後往前數,直到遇到空格或到達字串開頭

Approaches#

1: 使用內建函式#

  • 概念: 用 trim() 去除首尾空格,再用 splitlastIndexOf 取最後一個單字
  • 時間複雜度: O(n) - trim 和 split 都需遍歷
  • 空間複雜度: O(n) - 產生新字串
class Solution {
    fun lengthOfLastWord(s: String): Int {
        return s.trim().split(" ").last().length
    }
}

⭐2: 從尾部掃描#

  • 概念: 從字串末尾開始,先跳過空格,再計算連續非空格字元數
  • 時間複雜度: O(n) - 最壞情況掃描整個字串
  • 空間複雜度: O(1) - 只用常數變數
class Solution {
    fun lengthOfLastWord(s: String): Int {
        var i = s.length - 1
        // 跳過尾部空格
        while (i >= 0 && s[i] == ' ') i--
        var length = 0
        // 計算最後一個單字長度
        while (i >= 0 && s[i] != ' ') {
            length++
            i--
        }
        return length
    }
}

🔑 Takeaways#

  • Pattern: 字串從後往前掃描,適用於處理尾部相關問題
  • 關鍵技巧: 面試中優先展示 O(1) 空間的手動解法;注意邊界處理(全空格、尾部空格)