每週刷個 leetcode 演算法題

Python之禪發表於2018-11-19

我們們每週至少來刷個 LeetCode 演算法題,提高自己的程式設計思維。刷 LeetCode 可以根據自身實際情況選擇難度適中的題目,沒有受過專業訓練的同學建議從一些簡單的題開始做,這樣一開始不至於打擊你的熱情。

題目:

實現一個演算法,將字串轉換成小寫形式。 地址:https://leetcode.com/problems/to-lower-case/

方法一

看到這個題的時候,不知道你的思路是什麼樣的,如果你熟悉 Python 裡面的API,最先想到的可能就是直接使用 str.lower() 方法就可以實現。實際開發中可以這麼做,不過,這道題的考察目的肯定不是這個。

def to_lower_case(text):
   return text.lower()

方法二

你可能聯想到了字元的 ASCII 碼值,26個英文字母在 ASCII 中分別對應一個值,大寫的A~Z對應 ASCII 值65~90,小寫的a~z是97~122,而且它們都是連續的,同一個字母大小寫值相差 32,所以如果某個字母在65~90區間,那麼將其加 32 就是對應的小寫字母。這裡,ascii碼值與字母之間的互相轉換需要用到兩個函式 ord 和 chr

>>> ord('a')
97
>>> chr(97)
'a'

640?wx_fmt=png

def to_lower_case(text):
   new_text = ""
   for c in text:

       if 65 <= ord(c) <= 90:
           c = chr(ord(c) + 32)
       new_text += c

   return new_text

方法三

第三種思路是這樣,如果你思考一下,26個字母大小寫都是一一對應的,每個大小字母都對應有一個小寫字母,這時你就可以遍歷每個字元判斷它是不是某個大寫字元,是的話,就找到對應的小寫字母就ok了。

類似這樣:

if c == 'A'
   return 'a'
elif c == 'B'
   return 'b'
elif
   ...

但是這樣寫,你要寫26個if條件,而更優雅的方式是使用字典來替代這種方式。 {“A”: “a”, “B”: ‘b’, ….}

def to_lower_case(s):
   upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
   lower = 'abcdefghijklmnopqrstuvwxyz'
   d = dict(zip(upper, lower))
   return "".join([d.get(i, i) for i in s])


640?
關注這個公眾號的
最後都學會了程式設計

相關文章