Skip to content

Commit c753a4a

Browse files
authored
Create 2472-maximum-number-of-non-overlapping-palindrome-substrings.js
1 parent 3bee590 commit c753a4a

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* @param {string} s
3+
* @param {number} k
4+
* @return {number}
5+
*/
6+
const maxPalindromes = function(s, k) {
7+
const len = s.length;
8+
// dp[i] 表示s[0 .. i - 1] 中的不重叠回文子字符串的最大数目
9+
const dp = new Array(len + 1).fill(0);
10+
// 如果s[i]不在回文字符串内,dp[i+1]=dp[i];
11+
// 如果s[l..r]是回文字符串且长度不小于k,那么dp[r+1]=max(dp[r+1],dp[l]+1)
12+
13+
// 中心扩展法
14+
// 回文中心:len个单字符和len-1个双字符
15+
for (let center = 0; center < 2 * len - 1; center++) {
16+
let l = center >> 1,
17+
r = l + (center % 2);
18+
dp[l + 1] = Math.max(dp[l + 1], dp[l]);
19+
while (l >= 0 && r < len && s[l] === s[r]) {
20+
if (r - l + 1 >= k) {
21+
dp[r + 1] = Math.max(dp[r + 1], dp[l] + 1);
22+
}
23+
// expand from center
24+
l--, r++;
25+
}
26+
}
27+
28+
return dp[len];
29+
};

0 commit comments

Comments
 (0)