Welcome to Subscribe On Youtube
824. Goat Latin
Description
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.- For example, the word
"apple"
becomes"applema"
.
- For example, the word
- If a word begins with a consonant (i.e., not a vowel), remove the first letter and append it to the end, then add
"ma"
.- For example, the word
"goat"
becomes"oatgma"
.
- For example, the word
- Add one letter
'a'
to the end of each word per its word index in the sentence, starting with1
.- For example, the first word gets
"a"
added to the end, the second word gets"aa"
added to the end, and so on.
- For example, the first word gets
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.
Solutions
-
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); } }
-
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)
-
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(' '); }
-
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(" ") } }