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.
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.
方法一:模拟
c++代码:
class Solution {
public:
string toGoatLatin(string sentence) {
// 元音集合 用set为了方便判断
unordered_set<char> vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
int n = sentence.size();
// cnt 单词数
int i = 0, cnt = 1;
string ans;
while (i < n) {
int j = i;
// 找到一个单词
while (j < n && sentence[j] != ' ') {
++j;
}
++cnt;
if (cnt != 2) {
ans += ' ';
}
if (vowels.count(sentence[i])) {
ans += sentence.substr(i, j - i) + 'm' + string(cnt, 'a');
}
else {
ans += sentence.substr(i + 1, j - i - 1) + sentence[i] + 'm' + string(cnt, 'a');
}
i = j + 1;
}
return ans;
}
};