824. Goat Latin
1. 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”.
- 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”.
Add one letter ‘a’ to the end of each word per its word index in the sentence, starting with 1. - 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 word “goat” becomes “oatgma”.
Return the final sentence representing the conversion from sentence to Goat Latin.
2. Example
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”
3. 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.
4. Solutions
Loop
n = sentence.size()
Time complexity: O(n)
Space complexity: O(1)
// focus on the readability
class Solution {
public:
string toGoatLatin(const string &sentence) {
stringstream stream(sentence);
string result;
for (string word, suffix("a"); stream >> word;) {
if (!is_vowel[word[0]]) {
word = move(word.substr(1) + word[0]);
}
result = move(result + word + "ma" + suffix + " ");
suffix.push_back('a');
}
result.pop_back(); // remove the last space
return result;
}
private:
unordered_map<char, bool> is_vowel{
{'a', true},
{'e', true},
{'i', true},
{'o', true},
{'u', true},
{'A', true},
{'E', true},
{'I', true},
{'O', true},
{'U', true}};
};