最长回文子串

import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * 基本思路:将原始串翻转,然后计算这两个串的最长公共子串即为最大的回文数 * * @author qibaoyuan * */ public class LongestPalindrome { /** * @param args */ public static void main(String[] args) { String input = "gabcecbaefderr"; String reverseInput = reverseString(input); List<String> results = LIS(input, reverseInput); Iterator<String> it = results.iterator(); System.out.println("最长公共字串为:"); while (it.hasNext()) { System.out.println("/t/t" + it.next()); } } // 对原始字符串翻转,如abc->cba public static String reverseString(String input) { StringBuffer sb = new StringBuffer(input); return sb.reverse().toString(); } /** * 求两个串的最大公共子串,可能含有多个所以采用list * * @param str1 * @param str2 * @return */ public static List<String> LIS(String str1, String str2) { // 转化成数组形式 char[] strChar1 = str1.toCharArray(); char[] strChar2 = str2.toCharArray(); // 矩阵,记录中间过程 int[][] arr = new int[strChar1.length][strChar2.length]; // 最小的循环 int len = strChar1.length < strChar2.length ? strChar1.length : strChar2.length; // 记录最大值的矩阵 int arrays[] = new int[len]; //记录最大值下标的数组 int indices[] = new int[len]; for (int i = 0; i < strChar1.length; i++) { for (int j = 0; j < strChar2.length; j++) { // 当前两个字符相等 if (strChar2[j] == strChar1[i]) { if (i == 0 || j == 0) { arr[i][j] = 1; if (arrays[0] < 1) { arrays[0] = 1; indices[0] = i; } } else { arr[i][j] = arr[i - 1][j - 1] + 1; if (arrays[0] < arr[i][j]) { arrays[0] = arr[i][j]; indices[0] = i; for (int num = 1; num < arrays.length; num++) { if (arrays[num] == 0) { break; } else { arrays[num] = 0; indices[num] = 0; } } } else if (arrays[0] == arr[i][j]) { int num = 0; for (int max : arrays) { if (max == 0) { arrays[num] = arr[i][j]; indices[num] = i; break; } num++; } } } } else { arr[i][j] = 0; } } } List<String> list = new ArrayList<String>(); for (int i = 0; i < arrays.length; i++) { if (arrays[i] == 0) { break; } int num = indices[i] - (arrays[i] - 1); String str = ""; for (int k = 0; k < arrays[i]; k++) { char temp = strChar1[num]; str += String.valueOf(temp); num++; } list.add(str); } return list; } }

你可能感兴趣的:(String,list,Arrays,Class,input,import)