一、前记(1/3)

嘿嘿,今天没啥想复习的念头,趁机把博客整理了一下,把“算法大挑战”这个系列单独列了出来。博客就没有那么杂乱无章了。

二、题目描述

我觉得在示例那个位置应该再举两个例子出来:

示例:
输入:“”
输出:0

输入:“happy”
输出:5

三、解题思路

1、我的思路

其实这道题我一开始写错了,我以为题目的检查机制都是正常的字符串,像:“hello world”,“my dear”这一类的字符串。这样的话直接倒序检查,到第一处空格的地方就停止。这样的话轻易就得到了最后一个单词的长度。BUT!!!检测机制里面还有比较奇奇怪怪的字符串,像;“hello”,“”。于是乎这样的方法就行不通了。于是要建立两个参数i,j。一个参数i找到单词的头部(前一个为空格,后一个为字母),j找到字符串的末尾(前一个为字母,后一个不为空格);但是还要注意只有单词和空字符串的情况。

参考代码:

#encoding:utf-8
class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        j = len(s) - 1
        while j >= 0 and s[j] == " ":   #去掉字符串后面的空格
            j -= 1
        if j == -1: return 0    #防范空字符串
        i = j

        while i >= 0 and s[i] != " ":   #倒序找到最后一个非空格的字母位置
            i -= 1
        return j - i


#as a checking
solution=Solution()
a="hee"
print(solution.lengthOfLastWord(a))

2、别人的思路

其他人我看了一下,用了一个splite()的函数方法,进行一个切割。(我感觉这种方法好简单QAQ!!)。以空格为分割符进行切割,但要防范末尾还有空格出现,所以先删除末尾的空格(s.rstrip(‘ ’))。

参考代码:

class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        l=s.rstrip(' ').split(" ")
        return len(l[-1])

#as a checking
solution=Solution()
a="hee  "
print(solution.lengthOfLastWord(a))

四、学到了什么?

1、利用双指针的思想,进行数据统计。

2、split()进行列表的切割。

3、rstrip(chars)删除string字符串指定字符。