1. 程式人生 > >LeetCode 824題 山羊拉丁文 -- JavaScript

LeetCode 824題 山羊拉丁文 -- JavaScript

題目描述:

給定一個由空格分割單詞的句子 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)