classSolution { publicintlongestDecomposition(String text) { if (text.isEmpty()) return0; // 若分割为空字符串,返回0 intn= text.length(); for (inti=1; i <= n / 2; ++i) { // 若前后缀相等,则立刻分割 if (text.substring(0, i).equals(text.substring(n - i))) { return longestDecomposition(text.substring(i, n - i)) + 2; } } return1; // 无法分割 } }
时间复杂度:$O(n^2)$
空间复杂度:$O(n)$
方法二:迭代
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
classSolution { publicintlongestDecomposition(String text) { intans=0; while (!text.isEmpty()) { inti=1, n = text.length(); while (i <= n / 2 && !text.substring(0, i).equals(text.substring(n - i))) ++i; if (i > n / 2) { // 无法分割 ++ans; break; } ans += 2; text = text.substring(i, n - i); } return ans; } }