找出最长回文子串

来源:互联网 发布:三菱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
原创粉丝点击