【LeetCode】824. 山羊拉丁文

422 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 本题只要一个sentence字符串,由英文单词组成。
    • sentence[i] 包含大小字母
    • sentence 中的单词都是由空格隔离

二、思路分析:

我们拿到本题,读完题意要求对句子中的单词进行按照山羊拉丁文规则添加移动字段操作。

  • 什么是山羊拉丁文?

    • 单词首字母是元音字母,需要在单词后面添加"ma"+"a"*(索引+1)
    • 单词首字母是非元音字母,需要将首字母移到单词末尾,再添加"ma"+"a"*(索引+1)

解答该题目,我们能马上想到使用模拟方法,就可以轻松解决,思路如下:

  • 首先将字符串 sentence 中的单词,通过空格分隔的方式转换成sentence_list列表
  • 使用for循环遍历sentence_list 列表,取出每一个单词sentence_list[i]
  • 对每一个单词首字母进行判断是否为元音字母
  • 只需要处理单词首字母为非元音字母时,将sentence_list[i] 进行重新拼接 sentence_list[i] = sentence[i][1::] + sentence[0]
  • 后续步骤都是将单词末尾添加sentence_list[i] = sentence_list[i] + "ma" + "a"*(i+1)
  • 直到遍历完整个sentence_list列表中单词,将得到的sentence_list转换成字符串形式" ".join(sentence_list)

注意:元音字母判断需要考虑到单词首字母为大写的情况(第一次提交没有过)

根据以上思路,我们使用Python能快速实现,代码如下:

class Solution(object):
    def toGoatLatin(self, sentence):
        """
        :type sentence: str
        :rtype: str
        """

        sentence_list = sentence.split()
        vowel = ["a","e","i","o","u","A","E","I","O","U"]

        for i in range(len(sentence_list)):
            if sentence_list[i][0] in vowel:
                sentence_list[i] = sentence_list[i][1::] + sentence_list[i][0]
            sentence_list[i] = sentence_list[i] + "ma" + "a"*(i+1)

        return " ".join(sentence_list)

强大的Python在处理问题时,代码变得非常简洁,比如本次这道题,仍然可以一行代码实现

VOWEL_SET = "aeiouAEIOU"
return ' '.join((word if word[0] in VOWEL_SET else word[1:] + word[0]) + 'ma' + (idx+1)*'a' for idx, word in enumerate(S.split()))

三、总结:

本题我们使用模拟方法可以轻松解决,AC代码记录如下:

image.png

时间复杂度O(n^2),空间复杂度为O(n)

以上是本期内容,欢迎大佬们点赞评论,下期见~~