Description
給定字串
s,包含英文字母和空格,回傳最後一個單字的長度。
Example:
Input: s = “Hello World” Output: 5
Intuition#
核心思路:從字串末尾開始,跳過尾部空格後,計算最後一個單字的長度。
- 注意字串尾部可能有多個空格,需要先跳過
- 從後往前數,直到遇到空格或到達字串開頭
Approaches#
1: 使用內建函式#
- 概念: 用
trim()去除首尾空格,再用split或lastIndexOf取最後一個單字 - 時間複雜度:
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) 空間的手動解法;注意邊界處理(全空格、尾部空格)