在 JavaScript 中將字串分割為儘可能多的部分


問題

我們要編寫一個 JavaScript 函式,其第一個也是唯一的引數是字串 str。

我們函式的目的是將這個字串分割成儘可能多的部分,讓每個字母只出現在一個部分中,然後返回一個整數陣列來表示這些部分的大小。

例如,如果輸入的函式是

輸入

const str = "ababcbacadefegdehijhklij";

輸出

const output = [9, 7, 8];

輸出說明

分割槽為 “ababcbaca”, “defegde”, “hijhklij”。這是一個分割槽,每個字母只出現在一個部分中。而“ababcbacadefegde”,“hijhklij”這樣的分割槽是不對的,因為它將字串 str 分割成更少的幾個部分。

示例

以下為程式碼 −

 現場演示

const str = "ababcbacadefegdehijhklij";
const splitStrings = (str = '') => {
   const res = []
   const map = {}
   for (let i = 0; i < str.length; i++) {
      map[str[i]] = i
   }
   let start = 0
   while (start <= str.length - 1) {
      let end = map[str[start]]
      for (let i = start + 1; i < end; i++) {
         const currentEnd = map[str[i]]
         if (currentEnd > end) {
            end = currentEnd
         }
      }
      res.push(end - start + 1)
      start = end + 1
   }
   return res
};
console.log(splitStrings(str));

輸出

[ 9, 7, 8 ]

更新時間: 24-4-2021

240 次瀏覽

開啟你的事業

完成課程,獲得認證

立即開始
廣告