每日一道演算法:最後一個單詞的長度

zhangdeTalk發表於2020-02-14

題目:給定一個僅包含大小寫字母和空格 ‘ ‘ 的字串 s,返回其最後一個單詞的長度。

如果字串從左向右滾動顯示,那麼最後一個單詞就是最後出現的單詞。

如果不存在最後一個單詞,請返回 0 。

示例1:

輸入:”Hello World”

輸出:5

說明: 一個單詞是指僅由字母組成、不包含任何空格的最大子字串。

解法一:字串遍歷

相關標籤

* 字串

思路分析:

從字串尾部進行反序遍歷,主要有三種情況:

第一種:最後一個單詞的後邊都是空格,比如"Hello world ",此時需要把尾部的空格都過濾掉,進行第二種情況的操作

第二種:當最後一個單詞後邊沒有空格時,比如"Hello world",此時把$end賦值給$start,一直遍歷到,直到出現空格或者到字串最開始,此時結果就是:$end - $start

第三種:如果全部都是空格時,即$end < 0,返回0

PHP程式碼實現:

/**
 * @param String $s
 * @return Integer
 */
function lengthOfLastWord($s) {
    $end = strlen($s) -1;
    while($end>=0 && $s[$end] == ' '){//過濾掉最右邊的空格
        $end--;
    }
    if($end < 0){//當全部都是空格時
        return 0;
    }
    $start = $end;//此時最後的一位字元肯定是最後一個單詞的最後一位
    while($start >= 0 && $s[$start] != ' '){//尋找最後一個單詞的開頭字元的位置
        $start--;
    }
    return $end - $start;
}
使用:
$s = "Hello world";
var_dump(lengthOfLastWord($s));

複雜度分析:

時間複雜度: O(n)
n是結尾為空格和最後一個單詞的總長度
空間複雜度: O(n)
n是最後一個單詞的長度

解題關鍵

做演算法題,一定要善於總結和找出規律,考慮要全面,各種可能的情況都要想到。

github

以後每次題解都會上傳到這個專案

LeetCode_PHP:https://github.com/zhangdejian/LeetCode_PHP

題目來源

力扣(LeetCode):https://leetcode-cn.com/problems/length-of...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

阿德

相關文章