【Leetcode_總結】824. 山羊拉丁文
阿新 • • 發佈:2018-12-16
Q:
給定一個由空格分割單詞的句子 S
。每個單詞只包含大寫或小寫字母。
我們要將句子轉換為 “Goat Latin”(一種類似於 豬拉丁文 - Pig Latin 的虛構語言)。
山羊拉丁文的規則如下:
- 如果單詞以母音開頭(a, e, i, o, u),在單詞後新增
"ma"
。 例如,單詞"apple"
變為"applema"
。 - 如果單詞以子音字母開頭(即非母音字母),移除第一個字元並將它放到末尾,之後再新增
"ma"
。 例如,單詞"goat"
變為"oatgma"
。 - 根據單詞在句子中的索引,在單詞最後新增與索引相同數量的字母
'a'
,索引從1開始。 例如,在第一個單詞後新增"a"
,在第二個單詞後新增"aa"
返回將 S
轉換為山羊拉丁文後的句子。
示例 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"
思路:
暴力求解
class Solution: def toGoatLatin(self, S): """ :type S: str :rtype: str """ vowel = ['a','e','i','o','u'] temp = S.split() for i in range(len(temp)): j = i + 1 if temp[i][0].lower() in vowel: temp[i] = temp[i]+'ma' while j > 0: temp[i] += 'a' j -= 1 else: temp[i] = temp[i][1:len(temp[i])] + temp[i][0] + 'ma' while j > 0: temp[i] += 'a' j -= 1 return " ".join(temp).lstrip(' ')
效率不高,由於迴圈太多
改進:字串是可以使用乘法相加的,避免使用迴圈
class Solution: def toGoatLatin(self, S): """ :type S: str :rtype: str """ vowel = ['a','e','i','o','u'] temp = S.split() for i in range(len(temp)): if temp[i][0].lower() in vowel: temp[i] = temp[i]+'ma' + 'a' * (i+1) else: temp[i] = temp[i][1:] + temp[i][0] + 'ma'+ 'a' * (i+1) return " ".join(temp).lstrip(' ')