最长回文,没有效率的

来源:互联网 发布:java配置文件是什么 编辑:程序博客网 时间:2024/05/21 07:53
package com.comp.string;import java.util.*;/* * w aa bwsw f d  */public class LHWSTR {/* * 采用递归实现 */public static String getLC(char[] test) {int length = test.length;return getLCC(test, 0, length - 1);}public static String getLCC(char[] test, int start, int end) {if (start < end) {if (check(test, start, end))return new String(test, start, end - start + 1);String str1 = getLCC(test, start + 1, end);String str2 = getLCC(test, start, end - 1);if (str1.length() > str2.length())return str1;elsereturn str2;} else {return new String();}}public static boolean check(char[] test, int start, int end){while (start < end) {if (test[start] == test[end]) {start++;end--;continue;}return false;}return true;}/* * 采用回文中间点进行考察 */public static String getLCS(char[] test) {int length = test.length;int start = 0;int end = length - 1;List<String> lstr = new ArrayList<String>();List<String> rstr = new ArrayList<String>();/* * 首先考虑最后的最大结果是奇数个回文,i不用考虑匹配 */for (int i = 0; i < length; i++) {int j = i - 1;int k = i + 1;while (start <= j && end >= k) {if (test[j] != test[k])break;j--;k++;}if ((j + 1) >= start && (k - 1) <= end)lstr.add(new String(test, j + 1, k - j - 1));}Iterator iter = lstr.iterator();int max = 0;String maxString = new String();while (iter.hasNext()) {String str = (String) iter.next();if (str.length() > max) {max = str.length();maxString = str;}}/* * 考虑最后的结果是是偶数个回文 */for (int i = 0; i < length; i++) {int j = i;int k = i + 1;while (start <= j && end >= k) {if (test[j] != test[k])break;j--;k++;}if ((j + 1) >= start && (k - 1) <= end)lstr.add(new String(test, j + 1, k - j - 1));}Iterator iter2 = rstr.iterator();while (iter2.hasNext()) {String str = (String) iter2.next();if (str.length() > max) {max = str.length();maxString = str;}}return maxString;}public static void main(String args[]) {char[] test = { 'w', 'a', 'a', 'b', 'w', 's', 'w', 'f', 'd' };System.out.println(LHWSTR.getLCS(test));}}