如果一个字符串S是由两个字符串T连接而成,即S = T + T, 我们就称S叫做平方串,例如"","aabaab","xxxx"都是平方串.
牛牛现在有一个字符串s,请你帮助牛牛从s中移除尽量少的字符,让剩下的字符串是一个平方串。换句话说,就是找出s的最长子序列并且这个子序列构成一个平方串。
输入一个字符串s,字符串长度length(1 ≤ length ≤ 50),字符串只包括小写字符。
输出一个正整数,即满足要求的平方串的长度。
frankfurt
4
import java.util.Scanner;
/**
* @Author: coderjjp
* @Date: 2020-05-15 8:12
* @Description: 平方串
* @version: 1.0
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
String l, r;
int ans = 0;
for (int i = 1; i < s.length(); i++){
l = s.substring(0, i);
r = s.substring(i);
int dp[][] = new int[l.length()+1][r.length()+1];
for (int m = 1; m <= l.length(); m++)
for (int n = 1; n <= r.length(); n++){
if (l.charAt(m-1) == r.charAt(n - 1)){
dp[m][n] = dp[m-1][n-1] + 1;
}else {
dp[m][n] = Math.max(dp[m-1][n], dp[m][n-1]);
}
}
ans = Math.max(ans, dp[l.length()][r.length()]);
}
System.out.println(2 * ans);
}
} import java.util.*;
public class Main{
public static void main(String[] args){
try(Scanner in = new Scanner(System.in)){
String s = in.nextLine();
int max = 0;
for(int i = 1;i < s.length();i++){
max = Math.max(max,helper(s.substring(0,i),s.substring(i)));
}
System.out.println(2 * max);
}
}
public static int helper(String s1,String s2){
int[][] dp = new int[s1.length() + 1][s2.length() + 1];
for(int i = 0;i < s1.length();i++){
for(int j = 0;j < s2.length();j++){
dp[i + 1][j + 1] = s1.charAt(i) == s2.charAt(j) ? dp[i][j] + 1 : Math.max(dp[i][j + 1],dp[i + 1][j]);
}
}
return dp[s1.length()][s2.length()];
}
}