iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0

解題程式碼

const isPalindrome = (s) => s === s.split('').reverse().join('');

var partition = function (s) {
  const result = [];

  const backTracking = (path, index) => {
    if (index === s.length) result.push([...path]);

    for (let i = index + 1; i <= s.length; i++) {
      let subStr = s.slice(index, i);

      if (isPalindrome(subStr)) {
        path.push(subStr);
        backTracking(path, i);
        path.pop();
      }
    }
  };
  backTracking([], 0);

  return result;
};

解題思路、演算法

這題用回溯法解題,要想到遞迴的中止條件有兩個:

  1. 已經走到 input 字串 s 的最後索引,蒐集回文字串的陣列 path 會被加入結果
  2. 若回溯過程找到的子字串不是回文,就不繼續遞迴下去

概念圖:

解法的時間、空間複雜度

時間複雜度: O(2^n * n),n 的部分精確來說是 3 * n,判斷字串是否是回文
空間複雜度: O(n)

參考資料

Palindrome Partitioning - Backtracking - Leetcode 131

「代码随想录」带你学透回溯算法!131. 分割回文串

Yes


上一篇
90. Subsets II
下一篇
846. Hand of Straights
系列文
向 NeetCode、官神看齊! 分享自己的解題筆記和影片。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言