题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
String input;
while ((input = read.readLine()) != null) {
OD od = new OD();
System.out.println(od.HJ32_PassWordSub(input));
}
}
}
class OD {
protected int HJ32_PassWordSub(String s) {
int length = s.length();
if (length == 1) return 1;
if (length == 2 && s.charAt(0) == s.charAt(1)) {
return 2;
} else if (length == 2) {
return 1;
}
int resL = 0;
int resR = 0;
if (s.equals(HJ32_getReversString(s)))return length;
String substring_ = s;
//ABBA型
for (int j = 0; j < length; j++) {
for (int i = 2; i < substring_.length(); i++) {
String substring = substring_.substring(0, i);
if (substring.length() * 2 > substring_.length()) break;
if (substring.charAt(0) != substring_.charAt(substring.length() * 2 - 1))
continue;
if (HJ32_JudgeReversAndReasonable(substring_, substring)) {
resL = Math.max(resL, substring.length() * 2);
}
}
substring_ = s.substring(j);
}
//ABA型
for (int j = 0; j < length; j++) {
for (int i = 2; i < substring_.length(); i++) {
String substring = substring_.substring(0, i);
if (substring.length() * 2 > substring_.length()) break;
if (substring.charAt(0) != substring_.charAt(substring.length() * 2 - 2))
continue;
if (HJ32_JudgeIsABA(substring_, substring)) {
resL = Math.max(resL, substring.length() * 2 - 1);
}
}
substring_ = s.substring(j);
}
return resL;
}
private String HJ32_getReversString(String s) {
StringBuilder stringBuilder = new StringBuilder(s);
return stringBuilder.reverse().toString();
}
private boolean HJ32_JudgeReversAndReasonable(String substring_,
String substring) {
if (substring.length() * 2 > substring_.length()) return false;
String temp = substring_.substring(substring.length(), substring.length() * 2);
return HJ32_getReversString(temp).equals(substring);
}
private boolean HJ32_JudgeIsABA(String substring_, String substring) {
if (substring.length() * 2 - 1 > substring_.length()) return false;
String temp = substring_.substring(substring.length() - 1,
substring.length() * 2 - 1);
return HJ32_getReversString(temp).equals(substring);
}
}
