题解 | 最长回文子序列
最长回文子序列
https://www.nowcoder.com/practice/82297b13eebe4a0981dbfa53dfb181fa
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static int longest(String s) { int n = s.length(); int [][]dp = new int [n][n]; for (int i = 0; i < n; i++) { dp[i][i] = 1; } for (int length = 2; length <= n; length++) { for (int i = 0; i <= n - length; i++) { int j = i + length - 1; if (s.charAt(i) == s.charAt(j)) { if (length == 2) { dp[i][j] = 2; } else { dp[i][j] = dp[i + 1][j - 1] + 2; } } else { dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]); } } } return dp[0][n - 1]; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input = scanner.nextLine().trim(); scanner.close(); System.out.println(longest(input)); } }