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;
else
return 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));
}
}
最长回文,没有效率的
最新推荐文章于 2025-05-09 10:22:39 发布