英文原文
You are given a string sentence that consist of words separated by spaces. Each word consists of lowercase and uppercase letters only.
We would like to convert the sentence to "Goat Latin" (a made-up language similar to Pig Latin.) The rules of Goat Latin are as follows:
- If a word begins with a vowel (
'a','e','i','o', or'u'), append"ma"to the end of the word.<ul> <li>For example, the word <code>"apple"</code> becomes <code>"applema"</code>.</li> </ul> </li> <li>If a word begins with a consonant (i.e., not a vowel), remove the first letter and append it to the end, then add <code>"ma"</code>. <ul> <li>For example, the word <code>"goat"</code> becomes <code>"oatgma"</code>.</li> </ul> </li> <li>Add one letter <code>'a'</code> to the end of each word per its word index in the sentence, starting with <code>1</code>. <ul> <li>For example, the first word gets <code>"a"</code> added to the end, the second word gets <code>"aa"</code> added to the end, and so on.</li> </ul> </li>
Return the final sentence representing the conversion from sentence to Goat Latin.
Example 1:
Input: sentence = "I speak Goat Latin" Output: "Imaa peaksmaaa oatGmaaaa atinLmaaaaa"
Example 2:
Input: sentence = "The quick brown fox jumped over the lazy dog" Output: "heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"
Constraints:
1 <= sentence.length <= 150sentenceconsists of English letters and spaces.sentencehas no leading or trailing spaces.- All the words in
sentenceare separated by a single space.
中文题目
给定一个由空格分割单词的句子 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"
说明:
S中仅包含大小写字母和空格。单词间有且仅有一个空格。1 <= S.length <= 150。
通过代码
官方题解
方法 1:字符串
想法
我们直观地解决这个问题,问题的难点在于实现。
算法
对于句子中的每个 word,如果是元音字母,就不变;如果是辅音字母,就旋转这个单词(在 Python 中是 word[1:] + word[:1],在 Java 中是 word.substring(1) + word.substring(0, 1)。
然后,我们加入 "ma" 和期望数量的 "a" 以及一个空格。
[]class Solution { public String toGoatLatin(String S) { Set<Character> vowel = new HashSet(); for (char c: new char[]{'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'}) vowel.add(c); int t = 1; StringBuilder ans = new StringBuilder(); for (String word: S.split(" ")) { char first = word.charAt(0); if (vowel.contains(first)) { ans.append(word); } else { ans.append(word.substring(1)); ans.append(word.substring(0, 1)); } ans.append("ma"); for (int i = 0; i < t; i++) ans.append("a"); t++; ans.append(" "); } ans.deleteCharAt(ans.length() - 1); return ans.toString(); } }
[]class Solution(object): def toGoatLatin(self, S): def convert(word): if word[0] not in 'aeiouAEIOU': word = word[1:] + word[:1] return word + 'ma' return " ".join(convert(word) + 'a' * i for i, word in enumerate(S.split(), 1))
复杂度分析
- 时间复杂度:$O(N^2)$,其中 $N$ 是
S的长度。这包含旋转单词的复杂度以及添加额外"a"字符。 - 空间复杂度:$O(N^2)$,空间需要考虑加入的额外字符
"a"。
统计信息
| 通过次数 | 提交次数 | AC比率 |
|---|---|---|
| 17589 | 28536 | 61.6% |
提交历史
| 提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
|---|