五分钟读懂:山羊拉丁文

五分钟读懂:山羊拉丁文
我们先来看题目描述给你一个由若干单词组成的句子 sentence 单词间由空格分隔。每个单词仅由大写和小写英文字母组成。请你将句子转换为 “山羊拉丁文Goat Latin”一种类似于 猪拉丁文 - Pig Latin 的虚构语言。山羊拉丁文的规则如下如果单词以元音开头a, e, i, o, u在单词后添加ma。例如单词 apple 变为 applema 。如果单词以辅音字母开头即非元音字母移除第一个字符并将它放到末尾之后再添加ma。例如单词 goat 变为 oatgma 。根据单词在句子中的索引在单词最后添加与索引相同数量的字母a索引从 1 开始。例如在第一个单词后添加 a 在第二个单词后添加 aa 以此类推。返回将 sentence 转换为山羊拉丁文后的句子。示例 1输入sentence I speak Goat Latin 输出Imaa peaksmaaa oatGmaaaa atinLmaaaaa示例 2输入sentence The quick brown fox jumped over the lazy dog 输出heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa提示1 sentence.length 150sentence 由英文字母和空格组成sentence 不含前导或尾随空格sentence中的所有单词由单个空格分隔解决方案方法一找到每一个单词 模拟思路和算法我们可以对给定的字符串 sentence 进行一次遍历找出其中的每一个单词并根据题目的要求进行操作。在寻找单词时我们可以使用语言自带的 split() 函数将空格作为分割字符得到所有的单词。为了节省空间我们也可以直接进行遍历每当我们遍历到一个空格或者到达 sentence 的末尾时我们就找到了一个单词。当我们得到一个单词 w 后我们首先需要判断 w 的首字母是否为元音字母。我们可以使用一个哈希集合 vowels 存储所有的元音字母 aeiouAEIOU这样只需要判断 w 的首字母是否在 vowels 中。如果是元音字母那么单词本身保持不变如果是辅音字母那么需要首字母移到末尾这里使用语言自带的字符串切片函数即可。在这之后我们需要在末尾添加 m 以及若干个 a因此可以使用一个变量 cnt 记录需要添加的 a 的个数它的初始值为 1每当我们得到一个单词就将它的值增加 1。代码Cclass Solution { public: string toGoatLatin(string sentence) { unordered_setchar vowels {a, e, i, o, u, A, E, I, O, U}; int n sentence.size(); 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; } };