c语言判断字符串是不是回文_LeetCode 热题 HOT 100 5. 最长回文子串
题目
题解
暴力法
我们根据回文字符串特点进行判断一个字符串是不是回文。
// 回文子串:首尾对称相等const isPalindrome = s => { // abba aba for (let i = 0; i < Math.floor(s.length / 2); i++) { if (s[i] !== s[s.length - 1 - i]) { return false } } return true}/** * @param {string} s * @return {string} */var longestPalindrome = function(s) { let answer = '' if (s.length <= 1) return s[0] || '' for (let i = 0; i < s.length - 1; i++) { for (let j = i + 1; j <= s.length; j++) { curStr = s.substring(i, j) if (curStr.length > answer.length && isPalindrome(curStr)) { answer = curStr } } } return answer};
动态规划
•一个回文字符串 abdba 去掉首尾后仍是回文 bdb•由此推导状态转移方程 dp•dp[i][j] 表示 s.substring(i, j+1) 这样一个字符串是不是回文字符串•dp[i][j] = (s[i] === s[j]) && dp[i+1][j-1]•dp[i+1][j-1] 即就表示去掉首位字符后•我们还需要考虑一个特殊情况 类似 a ab aba 肯定存在回文串 即 j - i <= 2•动态规划就是充分利用之前缓存的计算结果,快速推倒出一个字符串是不是一个回问文串•动态规划也是典型的 空间换时间的一种思路
/** * @param {string} s * @return {string} */var longestPalindrome = function(s) { const len = s.length let answer = '' const dp = Array.from(new Array(len), () => new Array(len).fill(false)) // 此处可以省略 base state 初始化 dp[i][j] = true for (let i = len - 1; i >= 0; i--) { for (let j = i; j < len; j++) { // 状态转移方程 dp[i][j] = (s[i] === s[j]) && (j - i <= 2 || dp[i+1][j-1]) // 更新最长子串 if (dp[i][j]) { console.log(s.substring(i, j + 1)) } if (dp[i][j] && (j - i >= answer.length)) { answer = s.substring(i, j + 1) } } }// console.log(dp) return answer};
推荐阅读
•告别动态规划,连刷 40 道题,我总结了这些套路,看不懂你打我(万字长文)[1]•如何理解动态规划?[2]
ps: 欢迎关注我的公众号 xyz编程日记,觉得不错的帮忙点个?,点个在看。
References
[1]
告别动态规划,连刷 40 道题,我总结了这些套路,看不懂你打我(万字长文): https://zhuanlan.zhihu.com/p/91582909[2]
如何理解动态规划?: https://www.zhihu.com/question/39948290
c语言判断字符串是不是回文_LeetCode 热题 HOT 100 5. 最长回文子串相关推荐
- 两数相加c++_LeetCode 热题 HOT 100(01,两数相加)
LeetCode 热题 HOT 100(01,两数相加) 不够优秀,发量尚多,千锤百炼,方可成佛. 算法的重要性不言而喻,无论你是研究者,还是最近比较火热的IT 打工人,都理应需要一定的算法能力,这也 ...
- C语言判断字符串是否为回文
C语言判断字符串是否为回文 回文就是字符串中心对称,如"abcba"."abccba"是回文,"abcdba"不是回文. /*判断字符串是否 ...
- C语言判断字符串类型及个数并输出
C语言判断字符串类型及个数并输出,这里判断的是: 小写字母:大写字母:空格:数字: #include <stdio.h> int main() {char a;int letter = 0 ...
- bigdecimal 判断是否为数字_C语言判断字符串是否为回文
回文就是字符串中心对称,如"abcba"."abccba"是回文,"abcdba"不是回文. /*判断字符串是否为回文*/ #include ...
- 判断相等_C语言判断字符串是否为回文
回文就是字符串中心对称,如"abcba"."abccba"是回文,"abcdba"不是回文. /*判断字符串是否为回文*/ #include ...
- char java 回文_LeetCode刷题笔记(Java)---第1-18题
题目来自LeetCode 文章目录 全部章节 1-18题 19-40题 41-60题 61-80题 81-100题 101-120题 121-140题 1.两数之和 2.两数相加 3.无重复字符串的最 ...
- 【100%通过率】华为OD机试真题 Java 实现【最长回文字符串】【2023 Q1 | 100分】
所有题目均有五种语言实现.C实现目录.C++ 实现目录.Python实现目录.Java实现目录.JavaScript实现目录 题目 如果一个字符串正读和反渎都一样(大小写敏感) ,则称 ...
- 【100%通过率】华为OD机试真题 C++ 实现【最长回文字符串】【2023 Q1 | 100分】
所有题目均有五种语言实现.C实现目录.C++ 实现目录.Python实现目录.Java实现目录.JavaScript实现目录 题目 如果一个字符串正读和反渎都一样(大小写敏感) ,则称 ...
- 【100%通过率】华为OD机试真题 Python 实现【最长回文字符串】【2023 Q1 | 100分】
所有题目均有五种语言实现.C实现目录.C++ 实现目录.Python实现目录.Java实现目录.JavaScript实现目录 题目 如果一个字符串正读和反渎都一样(大小写敏感) ,则称 ...
最新文章
- 练手扎实基本功必备:非结构文本特征提取方法
- NumPy 百题大冲关,冲鸭!
- vue 给url 中文参数 添加编码解码
- ThinkPHP3.1快速入门(3)查询语言
- linux python安装第三方库_Linux中安装python3.6和第三方库
- Educational Codeforces Round 112 E.Boring Segments-线段树+双指针
- 全国dns服务器地址
- php 工资 2018,2018年PHP程序员的进阶之路
- 计算机主机电源灯不亮,电脑电源指示灯不亮怎么回事
- JavaScript注释
- 炜煌E30 E31微型热敏打印机 STM32 串口驱动
- 普渡大学工程学院计算机工程,普渡大学电气工程专业申请条件.pdf
- python写入指定文件夹_python 获取指定文件夹下所有文件名称并写入列表的实例...
- opencv 裁剪 java_OpenCV3 Java图像裁剪(Trimming Rect)
- 手机方向传感器的缺点及解决方法探究
- php设计验证码图片,PHP图片验证码制作实现分享(全)
- Cannot commit, transaction is already closed
- dsf5.0获取嵌入页面的数据
- 信息技术发展史及其趋势
- 金山毒霸技术预览版1.0 beta【云沙箱 三引擎】发布(毒霸体验团队可优先测试)...
热门文章
- android 复制字符串,Cocos2dx 复制文本到剪切板(Android 和 ios)
- linux apache24 使用,科学网—linux_centos第24_2次课Apache的安装 - 郭会强的博文
- 用了十年的昵称badboy_怎样用5秒钟看清一对夫妻的真实感情状况?
- action无法传参数给html页面,HTML 解决form表单提交时,action url中参数无效问题
- python中如何替换某列特定数值_python 怎么根据两列值,修改对应的某列值,其中一列的为需要修改的列标题...
- hdfs 多个文件合并_hadoop学习笔记3 hadoop程序将本地文件夹中多个文件,合并为一个文件并上传到hdfs中--梦飞翔的地方(梦翔天空)...
- micropython仿真器_Micropython教程之TPYBoard DIY超声波测距仪实例演示
- Linux显示txt文件,如何在Linux中显示文本文件中的某些行?
- java 录音_用JAVA实现不限时录音功能
- 【转】事务和锁机制是什么关系? 开启事务就自动加锁了吗?