拉丁文)"/>
LeetCode每日一题 (824. 山羊拉丁文)
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 中的所有单词由单个空格分隔
Java版本:
class Solution {public String toGoatLatin(String sentence) {//定义结果变量String res = "";//使用split把句子分成单词String[] arr = sentence.split(" ");//遍历字符串数组for(int i = 0; i < arr.length; i++) {String temp = arr[i];//获取每个单词的第一个字母String one = temp.substring(0,1);//如果单词是元音字母(不区分大小写)if(one.equalsIgnoreCase("a")|| one.equalsIgnoreCase("e") || one.equalsIgnoreCase("i") || one.equalsIgnoreCase("o") || one.equalsIgnoreCase("u")) {temp += "ma";}else {//不是元音字母temp = temp.substring(1,temp.length()) + one;temp += "ma";}//单词在句子中的索引,因为是从1开始,所以要加1int index = 1 + i;//在单词后面添加 afor(int j = 1; j <= index; j++) {temp += "a";}//添加到结果中res += temp;//如果不是最后一个单词,每次添加完要加空格if(i != arr.length-1) {res += " ";}}//返回结果return res;}
}
c语言版
#define MAX_SIZE 2000 //1000长度不够,得稍微长一点
//判断是否是元音
bool check(char *str){char charr[5] = {'a','e','i','o','u'};for(int i = 0; i < 5; i++){if(charr[i] == tolower(str[0])){return true;}}return false;
}//字符串调换位置void reverse(char *str){int len = strlen(str);char temp = str[0];for(int i = 0; i < len - 1; i++){str[i] = str[i+1];}str[len-1] = temp;}char * toGoatLatin(char * sentence){char *res = malloc(sizeof(char)*MAX_SIZE);memset(res,0,sizeof(char)*MAX_SIZE);int i = 0;int len = strlen(sentence);int charIndex = 1; //第几个单词//遍历字符串,根据空格分隔单词char split[2] = " ";char *token = strtok(sentence,split);//分割单词while(token != NULL){//1.判断首字母是否是辅音,如果是辅音处理一下,元音不愿处理if(!check(token)){//处理辅音reverse(token);}//2.添加ma到字符串结尾sprintf(res,"%s%s%s",res,token,"ma");//添加到结果字符串中,并在末尾添加ma//添加a到结尾char * tempa = (char*)malloc(sizeof(char)*(charIndex+1));for(i = 0; i < charIndex; i++){tempa[i] = 'a';}//没有终止符,sprintf拼接不了,必须是两个带终止符的字符串tempa[i] = '\0';sprintf(res,"%s%s%s",res,tempa," ");charIndex++;token = strtok(NULL,split);} //最后一个空格要删掉int index = strlen(res);res[index -1] = '\0';return res;
}
更多推荐
LeetCode每日一题 (824. 山羊拉丁文)
发布评论