博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用python手刃leetcode(58):最后一个单词的长度【简单题】
阅读量:6072 次
发布时间:2019-06-20

本文共 2347 字,大约阅读时间需要 7 分钟。

前言

博客里新开一个“用python手刃Leetcode”的专题,顾名思义,主要目的是记录自己在Leetcode上刷题的过程,代码全程用python3编写,所用网址是:。这个网址的好处是: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])

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

转载地址:http://nsbgx.baihongyu.com/

你可能感兴趣的文章
读写分离
查看>>
搭建非域AlwaysOn win2016+SQL2016
查看>>
JVM —— 移除永久代
查看>>
ElasticSearch 常用的查询过滤语句
查看>>
[React] Implement a Higher Order Component with Render Props
查看>>
uc浏览器视频缓存合并工具
查看>>
jce_policy安装【java密码扩展无限制权限策略文件安装】
查看>>
django 中的transaction(事务管理)
查看>>
Array properties in Spring Framework
查看>>
【转】移动端App测试实用指南
查看>>
IOS学习笔记07---C语言函数-printf函数
查看>>
MySQL Cluster 4个数据节点压力测试--mysqlslap工具压400W写
查看>>
Sonar入门(四):Eclipse集成Sonar
查看>>
为PartialView传递一个参数
查看>>
《GK101任意波发生器》升级固件发布(版本:1.0.2.build126)
查看>>
新浪微博客户端(41)-切换表情键盘
查看>>
开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
查看>>
OSI七层模型具体解释
查看>>
thrift:swift项目笔记
查看>>
【CodeForces 266C】Below the Diagonal(模拟)
查看>>