824 山羊拉丁文

343 阅读2分钟

LeetCode 824 山羊拉丁文

题目

给定一个由空格分割单词的句子 S。每个单词只包含大写或小写字母。 我们要将句子转换为 “Goat Latin”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。

山羊拉丁文的规则如下:

  • 如果单词以元音开头(a, e, i, o, u),在单词后添加"ma"。 例如,单词"apple"变为"applema"。

  • 如果单词以辅音字母开头(即非元音字母),移除第一个字符并将它放到末尾,之后再添加"ma"。 例如,单词"goat"变为"oatgma"。

  • 根据单词在句子中的索引,在单词最后添加与索引相同数量的字母'a',索引从1开始。 例如,在第一个单词后添加"a",在第二个单词后添加"aa",以此类推。

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

示例 1:

输入: "I speak Goat Latin" 输出: "Imaa peaksmaaa oatGmaaaa atinLmaaaaa" 示例 2:

输入: "The quick brown fox jumped over the lazy dog" 输出: "heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa" 说明:

S 中仅包含大小写字母和空格。单词间有且仅有一个空格。 1 <= S.length <= 150。

我的代码

class Solution {
public:
    int isCharinYYin(char a){
        int i =0;
        char yyin[10] = {'A','a','E','e','I','i','O','o','U','u'};
        for(i=0;i<10;i++){
            if(a == yyin[i]){
                return 1;
            }
        }
        return 0;
    }

    string toGoatLatin(string S) {
        int i = 0,j=0,k = 0;
    S.append(" ");
    int len = S.length();
    char s[150];
    for( i=0;i<S.length();i++)
         s[i] = S[i];
    s[i] = '\0';
    printf("%s\n",s);
    int wordindex = 0;
    int ai = 1;
    string res = "";
    for(i=0;i<len;i++){
        char a[150];
        wordindex = 0;
        while(s[i]!=' '&&i<len){
            a[wordindex] = s[i];
            i++;
            wordindex++;
        }
        a[wordindex] = '\0';
        if(wordindex == 0){
            break;
        }
        if(isCharinYYin(a[0])){
            a[wordindex++] = 'm';
            a[wordindex++] = 'a';
        }else{
            char t = a[0];
            for(j=0;j<wordindex-1;j++){
                a[j] = a[j+1];
            }
            a[wordindex-1] = t;
            a[wordindex++] = 'm';
            a[wordindex++] = 'a';
        }
        for(k=0;k<ai;k++){
            a[wordindex++] = 'a';
        }
        a[wordindex++] = '\0';
        ai++;
        string aa = string(a);
        res.append(a);
        if((i+1)<len){
            res.append(" ");
        }
    }
        return res;
    }
};

函数isCharinYYin(char a)

判断传入的字符a是否是元音字母,是返回1,否则返回0.

题解

把s字符串一个个字符进行分析,用a数组暂存当单词,根据首字母情况改动单词a,添加到res字符串中,循环往复直到s字符串解析结束为止。