找出最长回文子串
来源:互联网 发布:三菱plc模拟量编程 编辑:程序博客网 时间:2024/05/17 09:02
回文字符串是指:争着和反着看都是一样,即“基于中线对称”,比如:aaaa,abba,abcba,都是回文串,现在我们任意给定一个字符串,求出该字符串中最长的那个子回文串,或者是求出所有子回文串,算法如下:
一、暴力---遍历字符串的所有子字符串,每个子字符串作一次检查:
/** * 最大回文子串,这方法属于“暴力检查啊。。”,即会将字符串的每个子字符串都检查一遍,最后找出最长的那个回文子串 * * @param s * 源字符串 * @return */public static String longestPalindrome1(String s) {int maxPalinLength = 0;String longestPalindrome = null;int length = s.length();// 扫描遍历所有子字符串for (int i = 0; i < length; i++) {for (int j = i + 1; j < length; j++) {int len = j - i;String curr = s.substring(i, j + 1);// 检查子串是否是回文串if (isPalindrome(curr)) {// 如果当前子串长度比前一个要长那么就覆盖之前的值,每次遍历如此,知道遍历完源字符串if (len > maxPalinLength) {longestPalindrome = curr;maxPalinLength = len;}}}}return longestPalindrome;}/** * 检查是否是回文字符串 * * @param s * @return */public static boolean isPalindrome(String s) {for (int i = 0; i < s.length() - 1; i++) {if (s.charAt(i) != s.charAt(s.length() - 1 - i)) {return false;}}return true;}
二、从字符串的每一个子符开始向两边比较等距离字符是否相等:
//==================== 第二种解法 ========================/** * 思路:for循环遍历源字符串,每次遍历的时候都以当前下标的字符为基准,然后比较该基准的“等距离”的字符是否相等。和快拍稍微 * @param s * @return */public static String longestPalindrome(String s) {//如果长度为0直接返回null,如果长度为1直接返回字符串本身if (s.isEmpty()) {return null;}if (s.length() == 1) {return s;} String longest = s.substring(0, 1);for (int i = 0; i < s.length(); i++) {//helper需要两次调用,这一次调用是解决形如:abba的回文串String tmp = helper(s, i, i);if (tmp.length() > longest.length()) {longest = tmp;} //这一次调用解决形如:abcab的回文串tmp = helper(s, i, i + 1);if (tmp.length() > longest.length()) {longest = tmp;}}return longest;} // Given a center, either one letter or two letter, // Find longest palindromepublic static String helper(String s, int begin, int end) {//进入while循环对称比较子字符while (begin >= 0 && end <= s.length() - 1 && s.charAt(begin) == s.charAt(end)) {begin--;end++;}return s.substring(begin + 1, end);}
以上就贴出两个算法,当然如果需要找出字符串中所有子回文串,只需要利用一个数组来保存每个子回文串就可以了,以上参考自:http://www.programcreek.com/2013/12/leetcode-solution-of-longest-palindromic-substring-java/。
0 0
- 找出最长回文子串
- 找出一个字符串中最长回文子串
- 在一个字符串中,找出最长回文子串
- 给定一个字符串s,找出最长的回文子串
- JavaScript找出最长回文串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- ReportNG 手把手教你弄测试报告
- 第一周项目二
- 121.Best Time to Buy and Sell Stock
- android-测试so动态库(九)
- Mac OS X 下开发 Android 程序时使用 USB 连真机调试
- 找出最长回文子串
- 第二周项目3-时间类
- oracle的check约束
- Activity的四种启动模式和onNewIntent()
- LeetCode: Binary Tree Depth相关题目合集
- [Oracle]行列转换(行合并与拆分)
- 旱冰场造价
- Unity UGUI——Image(Image Type)
- 第2周项目1-旱冰场造价