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字符串解析结束为止。