Java 获取最大回文字符串
来源:互联网 发布:java抽象类的特点 编辑:程序博客网 时间:2024/06/18 18:50
获取最大回文字符串也是笔记中常考到的一个题目,花果山用Java语言实现了时间复杂度为O(n^3)和O(n^2)的算法,而这篇博客则用C++实现了三种寻找最大回文的算法,前两种时间复杂度相似,其中第三种复杂度为O(n)的看的不是很明白。我们这里重点借鉴了其第二种插入标志字符的方式来实现寻找最大回文,这种方法用空间复杂度来减少了些许时间复杂度。该思想的核心是在待查找最大回文的字符串中每隔一个字符插入一个在字符串中不存在的一个字符,从而将查找奇数长度的回文和偶数长度的回文合并到一起。
/** * 获取最大回文,时间复杂度为O(n^2) * @param s待查找的字符串 * @return */public String getMaxPalindrome(String s){byte flag;//在前32位控制字符中找到一个字符串s中不存在的标志符for(flag=1;flag<32;flag++){if(s.indexOf(flag)==-1){break;}}if(flag==32)return null;StringBuffer sb=new StringBuffer();//插入标志符for(int i=0;i<s.length();i++){sb.append(s.charAt(i));sb.append((char)flag);}int maxLen=0;int start=0;int end=0;for(int i=0;i<sb.length();i++){int tmpLen;int offset;//如果sb中第i位字符是标志符if(sb.charAt(i)==flag){tmpLen=0;offset=1;}//如果是普通字符else {offset=2;tmpLen=1;}for(;offset<i&&sb.length()-i-1>offset;offset=offset+2){if(sb.charAt(i-offset)==sb.charAt(i+offset)){tmpLen=tmpLen+2;if(tmpLen>maxLen){maxLen=tmpLen;start=i-offset-1;end=i+offset+1;}}else continue;}}//首先将byte强制转换为char,在转换成String进行替换return sb.substring(start, end).replaceAll(""+(char)flag, "");}
注意上述代码中通过记录最大回文在sb中的位置,最后再转换成字符串,而不是在一开始通过设置一个maxStr这样的变量,在找到新的最大回文时更新这个变量。这样做是为了减少计算量,new一个String变量或者对String变量重新复制都比直接记录字符串位置耗时。
0 0
- Java 获取最大回文字符串
- 最大回文子字符串
- 最大回文字符串
- 字符串最大回文子串的查找java实现
- (leetcode)5.最大回文子字符串 Longest Palindromic Substring--Java
- 字符串的最大回文长度
- 回文字符串的最大长度
- 求最大回文子字符串
- 寻找最大的回文字符串
- 寻找最大回文字符串(python)
- java获取两个字符串中的最大匹配
- 字符串回文-Java实现
- 1501081146-java-回文字符串
- java 回文字符串(StringBuilder)
- Java判断回文字符串
- 关于c++最大回文的字符串长度
- 字符串的最大回文子串判断
- 字符串中最大的回文长度
- <PY><core python programming笔记>C21 数据库编程
- Scripts:查询参数信息的脚本parms.sql
- 类的sizeof
- Apache Indexes FollowSymLinks详解
- Android 停止Service
- Java 获取最大回文字符串
- 九度 题目1185:特殊排序
- AFNetworking 2.0 编译不过的问题修复
- android TabHost 导航标签
- Scripts:查询所有参数修改信息的脚本parm_mods.sql
- 书本Applet程序练习------同一页Applet之间的通信
- NYOJ 题目79 拦截导弹
- 新辰:90后大学生创业开口笑馒头店火爆全市 卖馒头日赚2000!
- Scripts:查询数据文件IO使用率的脚本 perf_file_io.sql