算法打败了100%的用户。
1.用unordered_set判断单词开头是不是元音。
2.一边找完整的单词,一边对单词里的字母进行换位置操作。时间复杂度只需要线性。
3.把末尾要添加的字母直接做成一个字符串,每次循环改一下即可。
4.要注意i的下标,S增加了词末字符串之后i的下标所指的位置会改变。
class Solution {
public:
string toGoatLatin(string S) {
unordered_set<char> vowel = { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' };
int i = 0;
string sub;
sub= "maa";
while (i < S.length())
{
int j = i + 1;
int isvowel = vowel.count(S[i]);
char tmp = S[i];
while ((S[j] != ' ') && (j<S.length()))
{
if (!isvowel) S[j - 1] = S[j];
j++;
}
if (!isvowel) S[j - 1] = tmp;
S.insert(j, sub);
i = j + sub.length()+1;
sub = sub + 'a';
}
return S;
}
};