本文主要是介绍824. Goat Latin,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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
。
解法一
//时间复杂度O(n), 空间复杂度O(n)
class Solution {
public:string toGoatLatin(string S) {string word = "", res = "";unordered_set<char> us({'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'});int i = 1;for(char c : S) {if(c == ' ') {if(word.empty()) continue;if(!us.count(word[0]))word = word.substr(1, word.size() - 1) + word[0];word += "ma" + string(i++, 'a');res += word + ' ';word = "";}else word += c;}if(!word.empty()) {if(!us.count(word[0]))word = word.substr(1, word.size() - 1) + word[0];word += "ma" + string(i++, 'a');res += word + ' ';}return res.substr(0, res.size() - 1);}
};
解法一类似第819题(最常见的单词)。遍历输入字符串S,遇到非字母词就开始处理word;否则只是简单地把当前字母追加到word。
注意处理最后一个单词。
2019/07/10 13:02
这篇关于824. Goat Latin的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!