英文原文
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 <= 150
sentence
consists of English letters and spaces.sentence
has no leading or trailing spaces.- All the words in
sentence
are 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% |
提交历史
提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
---|