题解 | #密码截取#
密码截取
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); } }