前言
博客裏新開一個「用python手刃Leetcode」的專題,顧名思義,主要目的是記錄本身在Leetcode上刷題的過程,代碼全程用python3編寫,所用網址是:leetcode中國。這個網址的好處是:1)純中文,解決了英語很差讀題困難的問題;2)網頁打開速度快。 ` 同時能夠看到:目前官網給出的解題代碼是用java編寫的,並無給出官方的python解答,本專欄除了儘可能使用多種解法給出每道題的python3解答代碼以外,還會記錄下本身在作題過程當中的一些收穫和思考。便於之後複習查閱。java
給定一個僅包含大小寫字母和空格 ' ' 的字符串,返回其最後一個單詞的長度。python
若是不存在最後一個單詞,請返回 0 。算法
說明:一個單詞是指由字母組成,但不包含任何空格的字符串。bash
示例:函數
輸入: "Hello World" 輸出: 5ui
一、首先,爲了理解算法思想,先不調用任何函數手動擼個複雜的,思路以下:首先去除掉字符串末尾的空格:倒着遍歷,判斷是空格就把字符串長度減一,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的了兩個函數進行實現。 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])
仍是那句話,在實際使用中能夠這麼用,可是作算法題仍是儘可能本身手動實現一下,以理解算法思想。