LeetCode 824題 山羊拉丁文 -- JavaScript
阿新 • • 發佈:2018-12-10
題目描述:
給定一個由空格分割單詞的句子 S
。每個單詞只包含大寫或小寫字母。
我們要將句子轉換為 “Goat Latin”(一種類似於 豬拉丁文 - Pig Latin 的虛構語言)。
山羊拉丁文的規則如下:
- 如果單詞以母音開頭(a, e, i, o, u),在單詞後新增
"ma"
。 例如,單詞"apple"
變為"applema"
。 - 如果單詞以子音字母開頭(即非母音字母),移除第一個字元並將它放到末尾,之後再新增
"ma"
。 例如,單詞"goat"
變為"oatgma"
。 - 根據單詞在句子中的索引,在單詞最後新增與索引相同數量的字母"a",索引從1開始。
例如,在第一個單詞後新增
"a"
"aa"
,以此類推。
返回將 S
轉換為山羊拉丁文後的句子。
示例 :
輸入: "I speak Goat Latin" 輸出: "Imaa peaksmaaa oatGmaaaa atinLmaaaaa"
輸入: "The quick brown fox jumped over the lazy dog" 輸出: "heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"
說明:
S
中僅包含大小寫字母和空格。單詞間有且僅有一個空格。1 <= S.length <= 150
。
方法分析:
山羊拉丁文的規則,題目上說的其實已經挺清楚了。不過這裡在贅述一下:
首先我們需要將句子通過空格分隔為單詞,然後對每個單詞進行判斷。
- 如果該單詞首字母是母音字母,即 a, e, i, o, u 中的任意一個,則在該單詞末尾新增字串
"ma"
。 - 如果該單詞首字母是子音字母,則移除首字母並將它放到末尾,之後再新增字串
"ma"
。 - 根據單詞在句子中的索引,在單詞最後新增與索引相同數量的字母"a",注意索引從1開始。
程式碼實現:
var toGoatLatin = function(S) { const vowel = {a:'a',e:'e',i:'i',o:'0',u:'u'}; return S.split(" ").map((item,index) => { item = item[0].toLowerCase() in vowel ? item + 'ma' : item.slice(1) + item[0] + 'ma'; return item += 'a'.repeat(++index); }).join(" "); };
程式碼解析:
演算法邏輯已經描述過,此處不再贅述流程。只說幾個關鍵點。在函式內部,定義了母音字母表,以用來後續判斷。in操作符用來檢測某個鍵是否存在於物件之中。字串的slice方法用來在字串中擷取子串。其用法為 slice(start,end),即擷取從start到(不包含)end的子串。字串的repeat函式用來定義str的重複次數,其用法為 str.repeat(count)。