<pre name="code" class="html">public static void main(String[] args)
{
// try {
// BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));
// System.out.print("请输入一个字符串:");
// String str = strin.readLine();
//
// System.out.println("第一个:"+str);
//
// System.out.println("请输入第二个字符串:");
// String str2 = strin.readLine();
// System.out.println("第2个:"+str2);
// } catch (IOException e) {
// e.printStackTrace();
// }
Scanner sc = new Scanner(System.in);
System.out.println("输入一个字符串:");
// System.out.println("输入字符串:"+sc.next());
String str = sc.next();
StringBuilder result = new StringBuilder();
int length = GetHuiWen(result, str);
System.out.println("result:" + result + " length:" + length);
}
public static int GetHuiWen(StringBuilder result, String src){
if (src == null || result == null) {
return -1;
}
int length = src.length();
if (length == 0) { //若长度为0
return 0;
}
if (length == 1) { //若长度为1,返回0,已与e099中99的情况区分开
result.append(src.charAt(0));
return 0;
}
if (length == 2) { //若长度为2,且为两个字符相等,返回1,即已e099中99这种情况
if (src.charAt(0) == src.charAt(1)) {
result.append(src.charAt(0));
return 1;
}
}
// if (length == 3) {
// if ((src.charAt(0) == src.charAt(1) && src.charAt(1) != src.charAt(2))
// || (src.charAt(2) == src.charAt(1) && src.charAt(1) != src.charAt(0))) {
// result.append(src.charAt(1));
// return 1;
// }
// }
if (src.charAt(0) == src.charAt(length - 1)) { //若首尾字符相等,将首尾字符去掉,继续递归寻找回文
result.append(src.charAt(0));
GetHuiWen(result, src.substring(1, length - 1));
return result.length();
}
else { //若首尾字符不相等,将首尾分别去掉一个字符,继续递归寻找回文
StringBuilder si = new StringBuilder();
StringBuilder sj = new StringBuilder();
int i = GetHuiWen(si, src.substring(0, length - 1)); //得到回文长度,来选择最长的回文
int j = GetHuiWen(sj, src.substring(1, length));
result.append(i >= j ? si : sj);
return i>=j ? i : j; //返回i,j而不返回result.length()是为了传递长度值以区分e099时随分别是e和9,
} //但返回9时的长度是1,e时是0。
}
最长回文子序列 递归算法
最新推荐文章于 2022-06-29 20:56:29 发布