首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 58. Length of Last Word:字符串尾部單詞長度計算

     編輯:關於C++

LeetCode 58. Length of Last Word 詳解

題目:給定字符串 s,僅包含大小寫字母與空格。返回最後一個單詞的長度(單詞定義為連續非空格字符)。若不存在單詞返回 0。

範例:s = "Hello World" → 返回 5 ("World");s = " fly me to the moon " → 返回 4 ("moon")。

核心思路:逆向掃描,兩階段

  1. 跳過尾部空格:從字符串末尾向前,直到遇到非空格字符或到達開頭。
  2. 計算單詞長度:繼續向前,直到遇到空格或到達開頭,計數器即為答案。

此法只需一次遍歷,無額外空間,完美處理尾部空格、多空格分隔、純空格等邊界情況。

代碼實現 (C++ / Python / Java)

// 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) 空間,且需處理空字符串列表情況,面試中建議展示雙指針原地解法。
  • ❌ 正向掃描記錄每個單詞長度:雖然可行,但需額外變量記錄「上一個單詞長度」,碼量較大且易出錯。

面試延伸

  1. Length of First Word:正向掃描,先跳過前導空格,再計數。
  2. 單詞計數:狀態機思想,in_word 標記,遇到非空格且非 in_word 時計數+1。
  3. 反轉字符串中的單詞 (LeetCode 151):雙指針原地反轉 + 尾部空格處理,綜合考察字符串操作基本功。

總結

Length of Last Word 是字符串處理的基礎題,核心考點是逆向遍歷與邊界條件處理。掌握「先跳過無效字符,再統計有效字符」的雙階段模式,可輕鬆應對類似「最後一個有效片段」的問題。面試中優先寫出 O(1) 空間的雙指針解法,再提及語言內建 API 簡化寫法,體現對底層邏輯與工程權衡的理解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved