Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
题目描述:
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = "Hello World"
输出:5
解释:最后一个单词是“World”,长度为5。
示例 2:
输入:s = " fly me to the moon "
输出:4
解释:最后一个单词是“moon”,长度为4。
示例 3:
输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为6的“joyboy”。
提示:
1 <= s.length <= 10的4次方
s 仅有英文字母和空格 ' ' 组成
s 中至少存在一个单词
思路分析:
方法1:
-
去掉末尾空格
-
空格分割成数组
-
取最后一个元素的长度
方法2:
-
定义一个逻辑变量,表示是否为字母。
定义一个计数变量。 -
对于字符串从后向前循环。
- 如果 是否为字母变量 为 false ,且当前字符是空格,则进入下一次循环。
- 如果 是否为字母变量 为 false ,且当前字符不是空格,则 是否为字母变量 设置为 true 。
- 如果 是否为字母变量 为 true ,且当前字符是空格,则跳出循环。
- 如果 是否为字母变量 为 true ,且当前字符不是空格,则 计数变量 加 1 。
-
返回计数变量。
AC 代码:
方法1(golang):
// 最后一个单词的长度
func lengthOfLastWord(s string) int {
tmp := strings.TrimSpace(s)
slice := strings.Split(tmp, " ")
ln := len(slice)
return len(slice[ln-1])
}
方法2(golang):
// 最后一个单词的长度
func lengthOfLastWord(s string) int {
isLetter := false
c := 0
for i := len(s) - 1; i >= 0; i-- {
if !isLetter && s[i] == ' ' {
continue
}
if !isLetter && s[i] != ' ' {
isLetter = true
}
if isLetter && s[i] == ' ' {
break
}
if isLetter && s[i] != ' ' {
c = c + 1
}
}
return c
}
总结:
第一个方法是最容易想到的,不过在 力扣 上提交了之后,发现速度和内存都没有优势。
然后开始想另外的方法,最后想到了第二个方法。
第二个方法用 go 语言很方便,其它语言倒是没试,只是觉着 go 可以直接对字符串循环,这个很给力。