山羊拉丁文 - [Python3]

山羊拉丁文 - [Python3]

山羊拉丁文这是个很奇怪的名字 ) 是由 LintCode (详见 LintCode介绍)提供的一道 简单 级别的面试题,接下来我对Python3的实现做以简单解释。

题目描述

给定句子S,其由用空格分隔的单词组成。 每个单词仅包含小写和大写字母。

我们想将句子转换为“Goat Latin”(一种类似于Pig Latin的伪造语言)。

Goat Latin的规则如下:

如果一个单词以元音(a,e,i,o或u)开头,则在单词的末尾附加“ma”。
例如,“apple”这个词就变成了“applema”。

如果一个单词以辅音(即不是元音)开头,则删除第一个字母并追加它到最后,然后添加“ma”。
例如,“山羊”这个词就变成了“oatgma”。

在句子的每个单词的末尾添加一个字母’a’,从1开始。
例如,第一个单词将“a”添加到结尾,第二个单词将“aa”添加到结尾,依此类推。

返回将从S到Goat Latin的转换后的最终语句。

注意事项

  • S仅包含大写,小写和空格。 每个单词之间只有一个空格。
  • 1 <= S.length <= 150

样例

样例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'
            results.append(word)
            
        return ' '.join(results)

可见这种实现方法是简化了大量步骤,比如在判断元音上,首先设定了一个字符串 vowels 然后直接拆分字符串 S ,判断其首字母是否在已经规定的 vowels 里,同样为了避免大写字母的麻烦,在判断时将首字母转为小写即可。

还有更多的简化,比如把每个词都必定会加的词尾 maa 专门提开,把它储存到 adds 在每一次循环过后给 adds 再加一个 a 即可。

最终将每个转换后的单词依次输出。

感谢浏览

你可能感兴趣的:(python,字符串,自然语言处理,经验分享)