题目
给你一个字符串
s
,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
我的解法
nums:最后一个单词长度。
反向遍历s。如果末尾是空格,就继续遍历;直到末尾不是空格,开始计数;退出条件为,i == " " and nums != 0,属于else里了。最后返回nums。
时间复杂度:O(n)
空间复杂度:O(1)
class Solution:
def lengthOfLastWord(self, s: str) -> int:
nums=0
for i in s[::-1]:
if i==" " and nums==0:
continue
elif i != " " :
nums=nums+1
else:
break
return nums
Accepted
- 58/58 cases passed (16 ms)
- Your runtime beats 99.93 % of python3 submissions
- Your memory usage beats 5.12 % of python3 submissions (15.1 MB)
题解
法1:str.split()
通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串。
返回分割后的字符串列表。
注意使用区别:
split()将多个空格当成一个空格;
split(’ ')的时候,多个空格也要分割,会分割出来空。
class Solution:
def lengthOfLastWord(self, s: str) -> int:
return len(s.split()[-1])
Accepted
- 58/58 cases passed (16 ms)
- Your runtime beats 99.93 % of python3 submissions
- Your memory usage beats 40.09 % of python3 submissions (15 MB)
法2:反向遍历+指针
class Solution:
def lengthOfLastWord(self, s: str) -> int:
nums=0
rp=len(s)-1
while s[rp]==" "and rp>=0:
rp=rp-1
while s[rp]!=" " and rp>=0:
nums=nums+1
rp=rp-1
return nums
Accepted
- 58/58 cases passed (24 ms)
- Your runtime beats 97.38 % of python3 submissions
- Your memory usage beats 5.12 % of python3 submissions (15.1 MB)
总结
使用python还是应该用python的特性,切片优先于指针。
split()在切断字符串时,应广泛使用。