字符串的最长回文子串问题
来源:互联网 发布:java 轻量级orm框架 编辑:程序博客网 时间:2024/05/16 06:42
解题的具体思路都有相应注释,所以直接上代码
public class Palindrome {public static void main(String[] args) {Palindrome p = new Palindrome();System.out.println(p.getMost("")); //0System.out.println(p.getMost("1")); //1System.out.println(p.getMost("jdlakjlkljkadlkj"));//9}public int getMost(String str){if(str==null||str.length()==0){return 0;}int max=0,curL=0;/** * str的回文子串的长度可能为奇数,也有可能为偶数, * 在代码处理时比较麻烦 * 因此通过往每个字符的左右两边各插入一个'#'的方式, * * ==>得到chs, 则chs的回文子串必为奇数 * * 读者朋友可以在纸上画一画,验证上述结论是否成立 */char []chs = new char[str.length()*2+1];int index=0;for(;index<str.length();index++){chs[2*index] = '#';chs[2*index+1] = str.charAt(index);}chs[2*index]='#';/** * 接下来采用中心扩展法, * 假设最长回文子串的中心是c=1-->c=chs.length-1的某一个位置, * * 遍历这些位置,并记录相应的最大长度 */for(int c=1;c<chs.length-1;c++){/** * 假设中心为c * 则以c为中心,以g为半径,向左右两侧发散 * * 左侧临界点为c-g>=0,右侧临界点为c+g<=chs.length-1 */for(int g=0;(c-g>=0)&&(c+g<=chs.length-1);g++){if(chs[c-g]==chs[c+g]){curL = 2*g+1;if(curL>max){max = curL;}}else{break;}}}/** * 因为在长度为max的回文子串, * '#'的个数肯定比实际字符串多1,(max必为奇数) * 所以返回值=max/2 */return max/2;}}
0 0
- 字符串的最长回文子串问题
- 最长字符串回文子串问题
- 字符串中最长的回文子串问题
- 最长回文子字符串问题
- 最长对称字符串问题/最长回文子串问题
- 字符串的最长回文子序列以及最长子串
- 求字符串的最长回文子串
- 字符串的最长回文子串
- 求字符串的最长回文子串
- 字符串的最长回文子串
- 字符串:最长回文子串
- 【字符串】最长回文子串
- 最长回文子串问题
- 最长回文子串问题
- 最长回文子串问题
- 最长回文子串问题
- 最长回文子串问题
- 最长回文子串问题
- Java网络编程(TCP)
- JWT Authorization in Python aiohttp
- charles的小功能-mapping,breakpoints,repeat
- bcloud验证码中文问题
- java基础--20 自己封装一个DateUtil类
- 字符串的最长回文子串问题
- 单片机按键去抖原理
- 使用tomcat时,点击startup.bat时,dos命令行出现闪退现象。
- qt文件
- ORACLE 11G的BIEE 部署与运用(一)——RCU创建资料档案库(图示)
- Android开源工具库
- Struts2的学习及Struts2和Servlet的区别
- Java数组-查表法在生活中的应用举例
- USB设备驱动开发之扩展(利用USB虚拟总线驱动模拟USB摄像头)