【leetcode刷题笔记】:824. 山羊拉丁文

1. leetcode刷题笔记:字符串简单题

824.山羊拉丁文:

给定一个由空格分割单词的句子 S。每个单词只包含大写或小写字母。

我们要将句子转换为 “Goat Latin”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。

山羊拉丁文的规则如下:

  • 如果单词以元音开头(a, e, i, o, u),在单词后添加"ma"。 例如,单词"apple"变为"applema"。
  • 如果单词以辅音字母开头(即非元音字母),移除第一个字符并将它放到末尾,之后再添加"ma"。 例如,单词"goat"变为"oatgma"。
  • 根据单词在句子中的索引,在单词最后添加与索引相同数量的字母’a’,索引从1开始。例如,在第一个单词后添加"a",在第二个单词后添加"aa",以此类推。

返回将 S 转换为山羊拉丁文后的句子。

【leetcode刷题笔记】:824. 山羊拉丁文_第1张图片
思路:

  • 切分字符串,循环遍历来分割每个单词,对每个单词进行操作
  • 循环每个单词,判断首字母,非元音则移动,然后再添加"ma",和’a’。
  • 拼接
class Solution {
public:
    string toGoatLatin(string S) {
        set<char> records;
        records.insert('a');
        records.insert('e');
        records.insert('i');
        records.insert('o');
        records.insert('u');
        records.insert('A');
        records.insert('E');
        records.insert('I');
        records.insert('O');
        records.insert('U');
        vector<string> words;
        string word,res = "";
        char temp;
        for(int i=0;i<S.size();i++){
            if(S[i] != ' ')
                word += S[i];
            else{
                words.push_back(word);
                word = "";
            }
        }
        if(S.size()>0)  //S是存在的,
            words.push_back(word);  //添加最后一个单词
        for(int i=0;i<words.size();i++){
            if(records.find(words[i][0]) != records.end());
            else{
                temp = words[i][0];
                for(int k=0;k<words[i].size()-1;k++)  //将首字符移动到后面
                    words[i][k] = words[i][k+1];
                words[i][words[i].size()-1] = temp;
            }
            words[i] += "ma";
            for(int j=0;j<=i;j++)
                words[i] += 'a';
            res += words[i];
            if(i!=words.size()-1)
                res += " ";
        }
        return res;
    }
};

【leetcode刷题笔记】:824. 山羊拉丁文_第2张图片

刷题补充知识点:

  • 拼接ma的时候,我一开始用的单引号,是不行的,单引号表示的是字符,多个字母用双引号表示字符串。建议忘记都用双引号吧
  • set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。set中元素的值不能直接被改变。set内部采用的是一种非常高效的平衡检索二叉树:红黑树,也称为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树。set中数据只能通过insert()函数进行插入,且不能修改。set的find方法和map一样,set和map都是关联容器,查找效率高。

你可能感兴趣的:(leetcode刷题笔记)