package test;import java.io.*;import java.util.*;/*** Algorithm explanation https://www.educative.io/edpresso/longest-palindromic-subsequence-algorithm*/public class LongestPalindromicSubsequence {public static void main(String[] args) {String a = "BBABCBCAB";String b = "BABCBAB";String aLPS = LPS(a);String bLPS = LPS(b);System.out.println(a + " => " + aLPS);System.out.println(b + " => " + bLPS);}public static String LPS(String original) throws IllegalArgumentException {StringBuilder reverse = new StringBuilder(original);reverse = reverse.reverse();return recursiveLPS(original, reverse.toString());}private static String recursiveLPS(String original, String reverse) {String bestResult = "";// no more chars, then return emptyif (original.length() == 0 || reverse.length() == 0) {bestResult = "";} else {// if the last chars match, then remove it from both strings and recurif (original.charAt(original.length() - 1) == reverse.charAt(reverse.length() - 1)) {String bestSubResult =recursiveLPS(original.substring(0, original.length() - 1),reverse.substring(0, reverse.length() - 1));bestResult = reverse.charAt(reverse.length() - 1) + bestSubResult;} else {// otherwise (1) ignore the last character of reverse, and recur on original and updated// reverse again// (2) ignore the last character of original and recur on the updated original and reverse// again// then select the best result from these two subproblems.String bestSubResult1 = recursiveLPS(original, reverse.substring(0, reverse.length() - 1));String bestSubResult2 = recursiveLPS(original.substring(0, original.length() - 1), reverse);if (bestSubResult1.length() > bestSubResult2.length()) {bestResult = bestSubResult1;} else {bestResult = bestSubResult2;}}}return bestResult;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。