入门力扣自学笔记9 C++ (题目编号821)

824. 山羊拉丁文

题目:

给你一个由若干单词组成的句子 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里面的代码。

你可能感兴趣的:(力扣算法学习,算法,c++)