题目:
给你一个由若干单词组成的句子 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 <= 150
sentence 由英文字母和空格组成
sentence 不含前导或尾随空格
sentence 中的所有单词由单个空格分隔
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/goat-latin
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
首先,我们注意到无论任何一个单词,最后都要加一个ma,所以我们只需要判断首字母是不是元音字母即可。(这里判断可以不写那么长,可以利用tolower函数都转换为小写,该函数详细方法可以见入门力扣自学笔记5 C++ (题目编号819))
其次,我们要利用一个count,来判断这是第几个单词,方便在最后加几个字母‘a’。
最后,返回这个字符串即可。
代码:
class Solution {
public:
string toGoatLatin(string sentence) {
string res = "";
sentence += ' '; //在句子末尾加一个空格,从而为了后序终止。
int size = sentence.size();
int count = 1;
for (int i = 0; i < size; ++i)
{
bool turn = true;
if (sentence[i] == 'a' || sentence[i] == 'e' || sentence[i] == 'i' || sentence[i] == 'o' || sentence[i] == 'u' || sentence[i] == 'A' || sentence[i] == 'E' || sentence[i] == 'I' || sentence[i] == 'O' || sentence[i] == 'U')
turn = false;
string temp = "";
while (sentence[i] != ' ')
{
temp += sentence[i];
i ++;
}
if (turn)
{
char tp = temp[0];
temp.erase(0, 1);
temp += tp;
}
res += temp + "ma" + string(count, 'a') + ' ';
count ++;
}
res.pop_back();
return res;
}
};
注:
1.eraser函数()
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)
2.布尔类型(bool)的if语句
当a是布尔值的时候,a表示true,则!a表示false。
所以if(a)就是说当a=true的时候,执行if里面的代码,
反之if(!a)则表示当a=false的时候执行if里面的代码。