山羊拉丁文
-
题目:给你一个由若干单词组成的句子 s e n t e n c e sentence sentence ,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。
-
请你将句子转换为 “山羊拉丁文( G o a t Goat Goat L a t i n Latin Latin)”(一种类似于 猪拉丁文 P i g Pig Pig L a t i n Latin Latin 的虚构语言)。山羊拉丁文的规则如下:
-
如果单词以元音开头(
'a'
,'e'
,'i'
,'o'
,'u'
),在单词后添加"ma"
。
例如,单词"apple"
变为"applema"
。
如果单词以辅音字母开头(即,非元音字母),移除第一个字符并将它放到末尾,之后再添加"ma"
。
例如,单词"goat"
变为"oatgma"
。
根据单词在句子中的索引,在单词最后添加与索引相同数量的字母'a'
,索引从 1 开始。
例如,在第一个单词后添加"a"
,在第二个单词后添加"aa"
,以此类推。
返回将 s e n t e n c e sentence sentence 转换为山羊拉丁文后的句子。 -
这里要注意大写字母也算元音和辅音,所以一定要考虑全面。刚开始思考最后的
'a'
是利用循环添加的,后来发现可利用 Go语言自带的 API 添加,以此减少时间复杂度。
func toGoatLatin(sentence string) string {
Smap := map[byte]bool{
'a': true,
'e': true,
'i': true,
'o': true,
'u': true,
'A': true,
'E': true,
'I': true,
'O': true,
'U': true,
}
Sarr := strings.Split(sentence, " ")
for i := 0; i < len(Sarr); i++ {
if Smap[Sarr[i][0]] {
Sarr[i] += "ma"
} else {
b := Sarr[i][0]
Sarr[i] = Sarr[i][1:]
Sarr[i] += string(b) + "ma"
}
Sarr[i] += strings.Repeat("a", i+1)
}
Sstr := strings.Join(Sarr, " ")
return Sstr
}