leetcode 647. 回文子串 js实现
给你一个字符串 s
,请你统计并返回这个字符串中 回文子串 的数目。
回文字符串 是正着读和倒过来读一样的字符串。
子字符串 是字符串中的由连续字符组成的一个序列。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
示例 1:
输入:s = "abc" 输出:3 解释:三个回文子串: "a", "b", "c"
示例 2:
输入:s = "aaa" 输出:6 解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
提示:
1 <= s.length <= 1000
s
由小写英文字母组成
https://leetcode.cn/problems/palindromic-substrings/description/
/** * @param {string} s * @return {number} */ // 中心扩展法 var countSubstrings = function(s) { let ans = 0; let length = s.length; // 总的中心点=length*2-1 (即单个字符各一种+两两字符为一种) for(let center=0;center<length*2-1;center++){ let left = center/2; // 右侧指针可能跟左侧是同一个,也可能是左右各一个 let right = left+center%2; while(left>=0 && right <s.length && s.charAt(left)===s.charAt(right)){ ans++; left--; right++; } } return ans; }; // 动态规划 var countSubstrings = function(s) { let ans = 0; let length = s.length; let dp = new Array(length).fill(0).map((item)=>new Array(length)); // 外层循环相当于右侧指针,i // 内层循环相当于左侧指针,j // j<=i for(let i=0;i<length;i++){ for(let j=0;j<=i;j++){ if(s.charAt(i)===s.charAt(j)&&(i-j<2||dp[j+1][i-1])){ dp[j][i]=true; ans++; } } } return ans; };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南