山羊拉丁文 Python3

2021-10-19 10:23:26 字數 1601 閱讀 9535

山羊拉丁文( 這是個很奇怪的名字 ) 是由 lintcode (詳見 lintcode介紹)提供的一道 簡單 級別的面試題,接下來我對python3的實現做以簡單解釋。

給定句子s,其由用空格分隔的單詞組成。 每個單詞僅包含小寫和大寫字母。

我們想將句子轉換為「goat latin」(一種類似於pig latin的偽造語言)。

goat latin的規則如下:

如果乙個單詞以子音(即不是母音)開頭,則刪除第乙個字母並追加它到最後,然後新增「ma」。

例如,「山羊」這個詞就變成了「oatgma」。

在句子的每個單詞的末尾新增乙個字母』a』,從1開始。

例如,第乙個單詞將「a」新增到結尾,第二個單詞將「aa」新增到結尾,依此類推。

返回將從s到goat latin的轉換後的最終語句。

樣例1

輸入: 「i speak goat latin」

輸出: 「imaa peaksmaaa oatgmaaaa atinlmaaaaa」

樣例2

輸入: 「the quick brown fox jumped over the lazy dog」

輸出: 「hetmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa」

因為對單詞開頭字母有不同要求,所以首先把字串 s 進行 split() 來把它劃分成單詞。

然後對每個單詞分別處理,可以再次使用 list() 函式把單詞劃分成字母列表,然後判斷首字母是否為母音。

進而根據不同情況對單詞進行不同變換,最後輸出結果。

這種思路是最容易想到的辦法,缺點就是繁瑣,在占用資源和時間消耗上沒有優勢可言。

以下是lintcode目前最快的實現方法:

class

solution

:def

togoatlatin

(self, s)

: vowels =

'aeiou'

results =

adds =

'maa'

for word in s.split():

if word[0]

.lower(

)in vowels:

word += adds

else

: word = word[1:

]+ word[0]

+ adds

adds +=

'a'return

' '.join(results)

可見這種實現方法是簡化了大量步驟,比如在判斷母音上,首先設定了乙個字串 vowels 然後直接拆分字串 s ,判斷其首字母是否在已經規定的 vowels 裡,同樣為了避免大寫字母的麻煩,在判斷時將首字母轉為小寫即可。

還有更多的簡化,比如把每個詞都必定會加的詞尾 maa 專門提開,把它儲存到 adds 在每一次迴圈過後給 adds 再加乙個 a 即可。

最終將每個轉換後的單詞依次輸出。

山羊拉丁文

給定乙個由空格分割單詞的句子 s。每個單詞只包含大寫或小寫字母。我們要將句子轉換為 goat latin 一種類似於 豬拉丁文 pig latin 的虛構語言 山羊拉丁文的規則如下 如果單詞以子音字母開頭 即非母音字母 移除第乙個字元並將它放到末尾,之後再新增 ma 例如,單詞 goat 變為 oa...

山羊拉丁文

1.題目描述 給定乙個由空格分割單詞的句子 s。每個單詞只包含大寫或小寫字母。我們要將句子轉換為 goat latin 一種類似於 豬拉丁文 pig latin 的虛構語言 山羊拉丁文的規則如下 如果單詞以子音字母開頭 即非母音字母 移除第乙個字元並將它放到末尾,之後再新增 ma 例如,單詞 goa...

山羊拉丁文

一 題目解釋 字串 給定乙個由空格分割單詞的句子s。每個單詞只包含大寫或小寫字母。單詞 如果乙個單詞以母音開頭 即aeiou或aeiou 那麼在這個單詞末尾新增ma如果不是以母音開頭,那麼將第乙個字母移動到當前單詞末尾,並在後面新增ma在所有單詞末尾再額外新增n個a。n為當前單詞在句子中的次序,從1...