leetcode 824. 山羊拉丁文(Goat Latin)
阿新 • • 發佈:2019-04-01
aaaaaa nbma dog 移除 大小寫 分割 space dma bool
。
例如,單詞
目錄
- 題目描述:
- 示例 1:
- 示例 2:
- 解法:
題目描述:
給定一個由空格分割單詞的句子 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: string convert(const string& s, const vector<bool>& flag, const string& pst){ string res = ""; if(flag[s[0]]){ res = s + "ma" + pst; }else{ res = s.substr(1) + s[0] + "ma" + pst; } return res; } string toGoatLatin(string S) { int sz = S.size(); string pst = "a"; vector<bool> flag(128, false); string vowels = "aeiouAEIOU"; for(char ch : vowels){ flag[ch] = true; } int i = 0, j = 0; string res = ""; while(i < sz){ while(j < sz && S[j] != ' '){ j++; } if(i == j){ // is whitespace res += ' '; j++; }else{ res += convert(S.substr(i, j - i), flag, pst); pst += 'a'; } i = j; } return res; } };
leetcode 824. 山羊拉丁文(Goat Latin)