1. 程式人生 > >【Leetcode_總結】824. 山羊拉丁文

【Leetcode_總結】824. 山羊拉丁文

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(' ')