题目链接:https://leetcode-cn.com/problems/goat-latin/de ion/
给定一个由空格分割单词的句子
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。
C 代码:
int vowels(char ch)
{
return (ch == \'a\'||ch == \'e\'||ch == \'i\'||ch == \'o\'||ch == \'u\'||ch == \'A\'||ch == \'E\'||ch == \'I\'||ch == \'O\'||ch == \'U\');
}
void strcat_ss(char* target,char* first,char* end) //逐个单词strcpy到动态内存里;
{
//char* tar = target;
while(*target)
target++;
while (first < end)
{
*target = *first;
first++;
target++;
}
*target = \'\\0\';
}
char* strcat_s(char *str1, char *str2)
{
if (str1==NULL)
return str2;
else if (str2==NULL)
return str1;
else if(str1==NULL && str2==NULL)
return NULL;
strcat_ss(str1,str2,str2+strlen(str2));
return str1;
}
void exchange(char* pt1,char* pt2) //若不为元音,调到后面;
{
char temp = *pt1;
while (pt1 < pt2)
{
*pt1 = *(pt1+1);
pt1++;
}
*pt2 = temp;
}
char* toGoatLatin(char* S)
{
char* fun = (char *)malloc(2000);
memset(fun,0,2000*sizeof(char));
//char* fun = (char*)calloc(2000,sizeof(char));
char* afun = fun;
char* pt = S;
char* tr = S;
char* addon = \"ma\";
int n = 0;
while (*tr)
{
if (*tr == \' \')
{
tr++;
pt = tr;
}
while (*tr && *tr != \' \')
tr++;
n++; //n 第几个单词;
if (!vowels(*pt))
exchange(pt, tr-1);
strcat_ss(fun, pt, tr);
strcat_s(afun,addon);
while(*afun != \'\\0\')
afun++;
for(int i = 1;i <= n;i++,afun++)
*afun = \'a\';
if (*tr != \'\\0\')
*afun = \' \';
}
return fun;
}
C++代码:
class Solution {
public:
string toGoatLatin(string S) {
string str;
int i,j;
int n = 1; //第几个单词
for (i = 0,j = 0;i < S.size()+1; i++)
{
if (S[i] == \' \' || i == S.size())
{
cout << i << \" \";
if (!judge(S[j]) ) { //判断单词的首个字符是否为元音
rotate(S.begin() + j, S.begin() + j +1, S.begin() + i); // ratate循环左移一位
}
str.append(S.begin() + j,S.begin() + i);
str.append(\"ma\");
str.append(n,\'a\');
if (i != S.size()) str.append(\" \");
n++;
j = i + 1;
}
}
return str;
}
bool judge(char ch)
{
return ch == \'a\' || ch == \'e\' || ch == \'i\' || ch == \'o\' || ch == \'u\' ||
ch == \'A\' || ch == \'E\' || ch == \'I\' || ch == \'O\' || ch == \'U\';
}
};
谢谢。
继续阅读与本文标签相同的文章
下一篇 :
附录B 更多关于IPython的内容(完)
-
假设我们都失去视觉——淘宝的无障碍化建设 | 开发者必读(061期)
2026-05-18栏目: 教程
-
阿里巴巴“新六脉神剑”来了
2026-05-18栏目: 教程
-
RocketMQ消息轨迹-设计篇
2026-05-18栏目: 教程
-
前端进阶|第七天 携程笔试题,嵌套数组去层级去重并排序
2026-05-18栏目: 教程
-
阿里巴巴“新六脉神剑”背后的故事
2026-05-18栏目: 教程
