用python手刃leetcode(58):最後一個單詞的長度【簡單題】

前言

博客裏新開一個「用python手刃Leetcode」的專題,顧名思義,主要目的是記錄本身在Leetcode上刷題的過程,代碼全程用python3編寫,所用網址是:leetcode中國。這個網址的好處是:1)純中文,解決了英語很差讀題困難的問題;2)網頁打開速度快。 ` 同時能夠看到:目前官網給出的解題代碼是用java編寫的,並無給出官方的python解答,本專欄除了儘可能使用多種解法給出每道題的python3解答代碼以外,還會記錄下本身在作題過程當中的一些收穫和思考。便於之後複習查閱。java

題目

給定一個僅包含大小寫字母和空格 ' ' 的字符串,返回其最後一個單詞的長度。python

若是不存在最後一個單詞,請返回 0 。算法

說明:一個單詞是指由字母組成,但不包含任何空格的字符串。bash

示例:函數

輸入: "Hello World" 輸出: 5ui

一)不調用任何python包版本

一、首先,爲了理解算法思想,先不調用任何函數手動擼個複雜的,思路以下:首先去除掉字符串末尾的空格:倒着遍歷,判斷是空格就把字符串長度減一,z直到遇到單詞字母。接着從頭開始遍歷,遇到空格就把start指針移在該空格後的第一個單詞上。直到遍歷到最後一個單詞的尾字母。最後返回n-start(n原本就比末尾索引大一,因此不須要加一了)spa

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
複製代碼

二、固然,直接設置一個計數器計數也能夠。指針

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之間的長度,這個能夠本身實現如下。code

二)調用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])

仍是那句話,在實際使用中能夠這麼用,可是作算法題仍是儘可能本身手動實現一下,以理解算法思想。

相關文章
相關標籤/搜索