用python手刃leetcode(58):最后一个单词的长度【简单题】

前言

博客里新开一个“用python手刃Leetcode”的专题,顾名思义,主要目的是记录自己在Leetcode上刷题的过程,代码全程用python3编写,所用网址是:leetcode中国。这个网址的好处是:1)纯中文,解决了英语不好读题困难的问题;2)网页打开速度快。
`
同时可以看到:目前官网给出的解题代码是用java编写的,并没有给出官方的python解答,本专栏除了尽量使用多种解法给出每道题的python3解答代码之外,还会记录下自己在做题过程中的一些收获和思考。便于以后复习查阅。

题目

给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。

如果不存在最后一个单词,请返回 0 。

说明:一个单词是指由字母组成,但不包含任何空格的字符串。

示例:

输入: “Hello World” 输出: 5

一)不调用任何python包版本

1、首先,为了理解算法思想,先不调用任何函数手动撸个复杂的,思路如下:首先去除掉字符串末尾的空格:倒着遍历,判断是空格就把字符串长度减一,z直到遇到单词字母。接着从头开始遍历,遇到空格就把start指针移在该空格后的第一个单词上。直到遍历到最后一个单词的尾字母。最后返回n-start(n本来就比末尾索引大一,所以不需要加一了)

class Solution:
    def lengthOfLastWord(self, s):
        """
        :type s: str
        :rtype: int
        """
        n = len(s)
        i = n-1
        while i>= 0:
            if s[i].isspace():#也可以:s[i] ==" "
                n -= 1
                i -= 1
            else:
                break
        if n == 0:return 0
        start = 0
        for j in range(n):
            if s[j].isspace():
                start = j+1
        return n-start

2、当然,直接设置一个计数器计数也可以。

class Solution(object):
    def lengthOfLastWord(self, s):
        n = len(s)
        i = n-1
        while i>= 0:
            if s[i].isspace():#也可以:s[i] ==" "
                n -= 1
                i -= 1
            else:
                break
        counter=0
        for i in (s.strip()):
            if i == " ":
                counter = 0
            else:
                counter += 1
        return counter

当然还有一种思路就是:可以先把字符串反转开始遇到的空格都删掉,从而将start指在遇到的第一个字母删,接着再遇到一个空格返回当前索引和start之间的长度,这个可以自己实现以下。

二)调用python特有的包版本

当然,在实际生活中遇到这种情况,当然没有必要自己费力实现,只需要借助python的了两个函数进行实现。
1) strip()。这个函数用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列,只要在首尾,有多少删多少。有趣的是,这个单词的意思就是剥光,剥除的意思,充分证明了python函数起名的通俗,生动。

例如:

str = "0000000你好啊0000000"; 
str.strip( '0' );  # str = "你好啊"
 
str2 = "   你好啊      "
str2.strip(); #str2="你好啊"

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

另外,这个函数对于字符串可以不按照顺序匹配:

str = "123你好321231"
print (str.strip( '123' ))  # str = "你好"

2)) split()。这个函数通过按照指定的分隔符对字符串进行切片,并返回一个列表。它的英文意思有切分,切开的意思,命名同样很形象。
使用方法:str.split(str="分隔符", num=分割次数
其中str 默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。也可以自己指定。

用法示例:

str = "你好 啊,我很 好,我们大家都很 好"
str.split(','); # str = ["你好 啊","我很 好","我们大家都很 好"]

str.split(',',1); # str = ["你好 啊","我很 好,我们大家都很 好"]

print str.split() #str = ["你好","啊,我很","好,我们大家都很","好"]

借用这两个函数,这个题可以一行搞定:return len(s.strip().split(" ")[-1])

还是那句话,在实际使用中可以这么用,但是做算法题还是尽量自己手动实现一下,以理解算法思想。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值