难得一遇的我看完就有思路的题呀,既然要对每个单词都进行处理的话我就应该先获取每个单词,如何获取每个单词?几天前我做过一道题也是要获取每个单词,其中一个大佬的方法是利用字符串流stringstream获取,简单快捷,我就不用再去一个一个扫描字符进行判断了,而获取所有单词后的操作就简单了,先判断第一个字母是否为元音字母,这个可以利用unordered_set存储所有元音字母(包括大写字母)用以判断,若不是元音字母则要想将第一个字母移到最后的位置再进行统一的加“ma”和“a“的操作,最后再将所有单词链接成句子返回即可
class Solution
{
vector <string> words;
string ans;
unordered_set<char> vowels;
public:
//这里最开始我是通过函数判断是否元音字母的
/*bool isVowel(char temp)
{
switch (temp)
{
case 'a':case'i':case'u':case'e':case'o': case 'A':case'I':case'U':case'E':case'O':return true;
}
return false;
}*/
string toGoatLatin(string sentence)
{
if (sentence.empty())
return sentence;
vowels = { 'a', 'i', 'u', 'e', 'o', 'A', 'I', 'U', 'E', 'O' };
stringstream ss(sentence);
words = vector<string>(sentence.length());
int next = 0;
while (ss >> words[next++]);
for (int i = 0; i < next - 1; ++i)
{
if (vowels.count(words[i][0]) == 0)
{
words[i].push_back(words[i][0]);
words[i].erase(words[i].begin());
}
words[i] += "ma";
for (int j = 0; j < i + 1; ++j)
{
words[i].push_back('a');
}
ans += words[i] + " ";
}
ans.erase(ans.end() - 1);
return ans;
}
};