### Question:
StringAlgorithm { public static int substringBackTextDoublePoint(String origin) { long start = System.currentTimeMillis(); if (StringUtils.isBlank(origin)) return 0; if (isBackToText(origin)) return origin.length(); Set<String> substrings = new TreeSet<>(); for (int i = 0; i < origin.length() - 1; i++) { for (int j = origin.length() - 1; j > i; j--) { if (origin.charAt(i) == origin.charAt(j) && isBackToText(origin.substring(i, j + 1))) { substrings.add(origin.substring(i, j + 1)); } } } Optional<String> op = substrings.parallelStream().max(Comparator.comparingInt(String::length)); long end = System.currentTimeMillis(); System.err.println(end - start); return op.map(String::length).orElse(0); }  int getNoRepeatLength(String origin); static int substringBackTextDoublePoint(String origin); static int substringBackTextLength2(String origin); static int substringBackTextSinglePoint(String origin); static boolean isBackToText(String origin); static int kmp(String origin, String template); static String getCommonPrefix(String[] origin); static String multiplicationTable(Integer limit); String multiplicationTable();  }### Answer:
@Test public void testSubstringBackTextLength() { String tmp = "abcacbannnnn"; int length = StringAlgorithm.substringBackTextDoublePoint(tmp); System.out.println(length); }