Goat Latin
Problem
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.
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.
Solution
The problem Goat Latin
can be solved by simply converting the string based on the problem instruction.
Implementation
static const int fast_io = []()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
return 0;
}();
class Solution
{
public:
string toGoatLatin(string sentence)
{
sentence += ' ';
string word, ret;
int count = 0;
for (char &ch : sentence)
{
if (ch != ' ')
word += ch;
else
{
char first = tolower(word.front());
if (!(first == 'a' || first == 'e' || first == 'i' || first == 'o' || first == 'u'))
word = (word + word[0]).substr(1, -1);
ret += word + "ma";
word = "";
count += 1;
for (int i = 0; i < count; i++)
ret += "a";
ret += ' ';
}
}
return ret.substr(0, ret.length() - 1);
}
};