题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

思路:

判断s[i..j]是否是回文字符串,依赖于s[i+1...j-1],这种一个问题的结果依赖于另个子集问题的结果,自然必须想到是动态规划了(上一次计算的结果,可以被下一次计算使用到,减少不必要的重复计算)。

java代码

/**

* 题目3:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

* e.g.: 1. 输入: "babad" 输出: "bab"

* 2. 输入: "cbbd" 输出: "bb"

* 此解法还是效率太低,看官方解法前再优化优化

*

* @param s

* @return

*/

private static String solution04(String s) {

char[] input = s.toCharArray();

int length = input.length;

int[][] dp = new int[length][length];

int max = 0, ri = 0;

for (int i = 0; i < length; i++) {

for (int j = length - 1; j >= i; j--) {

// 后面优化加进去的

if (max > j - i + 1) {

continue;

}

if (1 == isAlindrome(input, dp, i, j)) {

if (j - i + 1 > max) {

max = j - i + 1;

ri = i;

}

}

}

}

return String.valueOf(input, ri, max);

}

/**

* 输入要求 end >= start

* dp[input.length][input.length]

*

* @param input

* @param dp

* @param start

* @param end

* @return int

*/

private static int isAlindrome(char[] input, int[][] dp, int start, int end) {

int length = input.length;

if (start > end || start < -1 || end >= length) {

return -1;

}

if (0 != dp[start][end]) {

return dp[start][end];

}

if (start == end) {

return 1;

} else if (1 == end - start || 2 == end - start) {

if (input[start] == input[end]) {

return 1;

} else {

return -1;

}

} else {

if (isAlindrome(input, dp, start + 1, end - 1) == 1) {

if (input[start] == input[end]) {

return 1;

} else {

return -1;

}

} else {

return -1;

}

}

}

算法时间复杂度:emmm....应该是要大于O(n^2),这个不太会分析了...(囧)

已经看到这里了,帮忙点个喜欢❤️呗,谢谢啦!!

Java中找出s字符串的回文_给定一个字符串 s,找到 s 中最长的回文子串。相关推荐

  1. java 求最长重复子串_给定一个字符串,求出其最长的重复子串。

    #include #include #include #include using namespace std; //给定一个字符串,求出其最长的重复子串 //方法一 string lsubstr_1 ...

  2. java统计文件中字符串出现的次数_统计一个字符串在文本文件中的出现次数

    代码实现: package com.jn.test; import java.io.File; import java.io.FileInputStream; import java.io.FileN ...

  3. python求近似值_python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配...

    已知一个元素,在一个list中找出相似的元素 使用场景: 已知一个其它来源的字符串, 它有可能是不完全与我数据库中相应的字符串匹配的,因此,我需要将其转为适合我数据库中的字符串 使用场景太绕了, 直接 ...

  4. python 已知一个字符,在一个list中找出近似值或相似值, 模糊匹配

    已知一个元素,在一个list中找出相似的元素 使用场景: 已知一个其它来源的字符串, 它有可能是不完全与我数据库中相应的字符串匹配的,因此,我需要将其转为适合我数据库中的字符串 使用场景太绕了, 直接 ...

  5. linux误修改文件名恢复,如何在 Linux 中找出最近或今天被修改的文件-linux修改文件名...

    Linux 用户在命令行上遇到的常见问题之一是定位具有特定名称的文件,如果你知道确定的文件名则可能会容易得假设你忘记了白天早些时候创建的文件的名称(在你包含了数百个文件的 home 文件夹中),但现在 ...

  6. 如何在指定的内容中找出指定字符串的个数

    这一道java面试题是在很早出来的时候,在一家大型的上市公司面试的题,不过当时交了白卷.现在将这道java面试题的答案整理出来. package com.buyli.interview; /** * ...

  7. 在一段英文字母中找出每个字母重复数量的方法(Java)

    首先需要了解下java的hashmap数据类型: hashmap是基于哈希表的Map接口的实现.hashmap有两个元素,一个是key(键名),一个是value(键值),就相当于一个字典了,和Pyth ...

  8. 输入一个字符串,用子函数完成在字符串中找出ACSII码值最大的字符,将其放在第一个位置,并将该字符前的所有字符向后顺序移动

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p143 7.1.2 上级实训内容 [实训内容9]输入一个字符串,用子函数完成在字符串中找出ACSII码 ...

  9. 找出连续最长数字串python_字符串中找出连续最长的数字字符串的实例代码

    //1. 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) //功能: //在字符串中找出连续最长的数字串,并把这个串的长度返回, ...

最新文章

  1. warning:partition X does not end on cylinder boundary
  2. 【JAVA基础篇】彻底搞懂拆箱装箱
  3. 性能测试学习05_lr(根据接口文档写脚本+参数化)
  4. [水力建模]EPANET代码解读1
  5. php 2个经纬度之间的距离,php计算两个经纬度之间的距离
  6. 【转】 Android常用实例—Alert Dialog的使用
  7. 实例练习----电影天堂抓取下载链接
  8. 【疑难解决】将设备通过Ehome协议接入EasyCVR,级联后视频无法播放如何解决?
  9. HTC Z710t解锁 获取root权限
  10. android 炫酷图案解锁,16个超级漂亮的手机锁屏图案,炫酷到飞起,总有一款适合你...
  11. dell 如何给raid分区_如何在 UEFI 配置的系统中访问 RAID 控制器设置
  12. 微信分享朋友圈功能开发流程详解
  13. 报表开发工具 Stimulsoft Reports V2022.3.5系列发布!
  14. 自然语言处理之语言模型与词向量
  15. 清北学堂2019.8.8
  16. ANSYS FLUENT 超临界流体物性分段线性插值数据批量导入
  17. 压力测试是什么?为什么要压力测试?怎么使用压力测试?
  18. python代码审查规则_python代码检查
  19. 什么是马甲包?有什么作用?
  20. 从零搭建基于 Java 的服务器生产环境

热门文章

  1. Spring框架IOC容器,依赖注入,控制反转
  2. python networkx教程_Python社交网络——NetworkX入门
  3. stm32呼吸灯程序_STM32裸机开发基础篇02点亮LED
  4. matla可以导出回归结果表格吗_表格高级筛选,一键筛出想要的数据
  5. CSS3学习笔记(3)—左右飞入的文字
  6. Windows Phone本地数据库(SQLCE):13、更新数据(翻译)
  7. 用JavaScript怎么写Windows的状态栏
  8. C语言之数组为参数传递表示指针(三十七)
  9. 编译器之后端原理(三十六)
  10. Ubuntu18.04安装“迅雷“