題目:給定字符串 s,僅包含大小寫字母與空格。返回最後一個單詞的長度(單詞定義為連續非空格字符)。若不存在單詞返回 0。
範例:s = "Hello World" → 返回 5 ("World");s = " fly me to the moon " → 返回 4 ("moon")。
此法只需一次遍歷,無額外空間,完美處理尾部空格、多空格分隔、純空格等邊界情況。
// C++
class Solution {
public:
int lengthOfLastWord(string s) {
int i = s.size() - 1;
while (i >= 0 && s[i] == ' ') --i; // 跳過尾部空格
int len = 0;
while (i >= 0 && s[i] != ' ') { ++len; --i; } // 計算長度
return len;
}
};
# Python
class Solution:
def lengthOfLastWord(self, s: str) -> int:
i = len(s) - 1
while i >= 0 and s[i] == ' ':
i -= 1
length = 0
while i >= 0 and s[i] != ' ':
length += 1
i -= 1
return length
# 一行流:return len(s.strip().split()[-1]) if s.strip() else 0
// Java
class Solution {
public int lengthOfLastWord(String s) {
int i = s.length() - 1;
while (i >= 0 && s.charAt(i) == ' ') i--;
int len = 0;
while (i >= 0 && s.charAt(i) != ' ') {
len++; i--;
}
return len;
}
}
| 指標 | 複雜度 | 說明 |
|---|---|---|
| 時間 | O(n) | n 為字符串長度,最多掃描一次 |
| 空間 | O(1) | 僅使用常數額外變量 |
"a " 會誤判為 0。i >= 0 必須在訪問 s[i] 之前,防止越界。split 後取最後一個:雖然 Python/JS 一行解決,但分割產生列表佔用 O(n) 空間,且需處理空字符串列表情況,面試中建議展示雙指針原地解法。in_word 標記,遇到非空格且非 in_word 時計數+1。Length of Last Word 是字符串處理的基礎題,核心考點是逆向遍歷與邊界條件處理。掌握「先跳過無效字符,再統計有效字符」的雙階段模式,可輕鬆應對類似「最後一個有效片段」的問題。面試中優先寫出 O(1) 空間的雙指針解法,再提及語言內建 API 簡化寫法,體現對底層邏輯與工程權衡的理解。