【58】最后一个单词的长度

题目

给你一个字符串 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()在切断字符串时,应广泛使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值