字符串
题目描述
给你一个由若干单词组成的句子 sentence
,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。
请你将句子转换为 “ 山羊拉丁文(Goat Latin )” (一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下:
如果单词以元音开头('a'
, 'e'
, 'i'
, 'o'
, 'u'
),在单词后添加"ma"
。
例如,单词 "apple"
变为 "applema"
。
如果单词以辅音字母开头(即,非元音字母),移除第一个字符并将它放到末尾,之后再添加"ma"
。
例如,单词 "goat"
变为 "oatgma"
。
根据单词在句子中的索引,在单词最后添加与索引相同数量的字母'a'
,索引从 1
开始。
例如,在第一个单词后添加 "a"
,在第二个单词后添加 "aa"
,以此类推。
返回将 sentence
转换为山羊拉丁文后的句子。
示例 1:
输入: sentence = "I speak Goat Latin"
输出: "Imaa peaksmaaa oatGmaaaa atinLmaaaaa"
示例 2:
输入: sentence = "The quick brown fox jumped over the lazy dog"
输出: "heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"
提示:
1 <= sentence.length <= 150
sentence
由英文字母和空格组成
sentence
不含前导或尾随空格
sentence
中的所有单词由单个空格分隔
解法
方法一
Python3 Java TypeScript Rust
class Solution :
def toGoatLatin ( self , sentence : str ) -> str :
ans = []
for i , word in enumerate ( sentence . split ()):
if word . lower ()[ 0 ] not in [ 'a' , 'e' , 'i' , 'o' , 'u' ]:
word = word [ 1 :] + word [ 0 ]
word += 'ma'
word += 'a' * ( i + 1 )
ans . append ( word )
return ' ' . join ( ans )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 class Solution {
public String toGoatLatin ( String sentence ) {
List < String > ans = new ArrayList <> ();
Set < Character > vowels
= new HashSet <> ( Arrays . asList ( 'a' , 'e' , 'i' , 'o' , 'u' , 'A' , 'E' , 'I' , 'O' , 'U' ));
int i = 1 ;
for ( String word : sentence . split ( " " )) {
StringBuilder t = new StringBuilder ();
if ( ! vowels . contains ( word . charAt ( 0 ))) {
t . append ( word . substring ( 1 ));
t . append ( word . charAt ( 0 ));
} else {
t . append ( word );
}
t . append ( "ma" );
for ( int j = 0 ; j < i ; ++ j ) {
t . append ( "a" );
}
++ i ;
ans . add ( t . toString ());
}
return String . join ( " " , ans );
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14 function toGoatLatin ( sentence : string ) : string {
return sentence
. split ( ' ' )
. map (( s , i ) => {
let startStr : string ;
if ( /[aeiou]/i . test ( s [ 0 ])) {
startStr = s ;
} else {
startStr = s . slice ( 1 ) + s [ 0 ];
}
return ` ${ startStr } ma ${ 'a' . repeat ( i + 1 ) } ` ;
})
. join ( ' ' );
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 use std :: collections :: HashSet ;
impl Solution {
pub fn to_goat_latin ( sentence : String ) -> String {
let set : HashSet <& char > = [ 'a' , 'e' , 'i' , 'o' , 'u' ]. into_iter (). collect ();
sentence
. split_whitespace ()
. enumerate ()
. map ( | ( i , s ) | {
let first = char :: from ( s . as_bytes ()[ 0 ]);
let mut res = if set . contains ( & first . to_ascii_lowercase ()) {
s . to_string ()
} else {
s [ 1 .. ]. to_string () + & first . to_string ()
};
res . push_str ( "ma" );
res . push_str ( & "a" . repeat ( i + 1 ));
res
})
. into_iter ()
. collect :: < Vec < String >> ()
. join ( " " )
}
}
GitHub