每日一道 LeetCode (13):最后一個(gè)單詞的長(zhǎng)度

?每天 3 分鐘,走上算法的逆襲之路。
?
前文合集
代碼倉(cāng)庫(kù)
GitHub:https://github.com/meteor1993/LeetCode
Gitee:https://gitee.com/inwsy/LeetCode
題目:最后一個(gè)單詞的長(zhǎng)度
題目來(lái)源:https://leetcode-cn.com/problems/length-of-last-word/
給定一個(gè)僅包含大小寫字母和空格?' '?的字符串 s,返回其最后一個(gè)單詞的長(zhǎng)度。如果字符串從左向右滾動(dòng)顯示,那么最后一個(gè)單詞就是最后出現(xiàn)的單詞。
如果不存在最后一個(gè)單詞,請(qǐng)返回 0?。
說(shuō)明:一個(gè)單詞是指僅由字母組成、不包含任何空格字符的 最大子字符串。
示例:
輸入:?"Hello?World"
輸出:?5
解題思路
今天這道題可以說(shuō)是相當(dāng)?shù)暮?jiǎn)單,感覺大家看完題以后都應(yīng)該有思路。
一個(gè)字符串,比如 「Hello World」 ,我們識(shí)別最后一個(gè)字符串是靠 space (空格) 進(jìn)行識(shí)別的,那么只要我倒著檢測(cè)整個(gè)字符串,遇到第一個(gè)空格停下來(lái),就找到了最后一個(gè)字符串。
需要注意的是我們需要跳過(guò)末尾的所有 space 。
代碼實(shí)現(xiàn)
代碼比較簡(jiǎn)單,就是一個(gè)逆序循環(huán),如下:
public?int?lengthOfLastWord(String?s)?{
????int?count?=?0;
????boolean?flag?=?false;
????for?(int?i?=?s.length()?-?1;?i?>=?0;?i--)?{
????????if?(flag?&&?s.charAt(i)?==?'?')?{
????????????break;
????????}
????????if?(s.charAt(i)?!=?'?')?{
????????????flag?=?true;
????????????count++;
????????}
????}
????return?count;
}
解釋一下,這里面第二個(gè)判斷 s.charAt(i) != ' ' 是只要當(dāng)前不是 space ,我們就增加計(jì)數(shù)。
而其中 flag 變量的作用就是,我們從后往前循環(huán)的時(shí)候,需要跳過(guò)所有的末尾 space ,只有從后往前數(shù)遇到第一個(gè)非 space 才會(huì)開始計(jì)數(shù)。
今天這道題很簡(jiǎn)單,我就不多說(shuō)了,實(shí)在理解有困難的同學(xué)可以在編輯工具里面多 debug 幾次(悄悄加一句,我遇到看不懂的代碼都是這么干的)。

