题目描述:
段式回文 其实与 一般回文 类似,只不过是最小的单位是 一段字符 而不是 单个字母。
举个例子,对于一般回文 "abcba" 是回文,而 "volvo" 不是,但如果我们把 "volvo" 分为 "vo"、"l"、"vo" 三段,则可以认为 “(vo)(l)(vo)” 是段式回文(分为 3 段)。
给你一个字符串 text,在确保它满足段式回文的前提下,请你返回 段 的 最大数量 k。
题目链接戳此
解题思路:
题目已经明确说明给定的字符串是段式回文,不需要判断,那么我们只需要找并且数数就OK了。本题可以用动态规划或者贪心算法,这里我们用的是递归。先从字符串的头和尾找到相同的字符串,并把剩下的截取出来应用自身函数递归。
由于返回的是数量,字符串最中间的字符串并没有与它相等的,所以在递归计算完成之后还需要加1,这里不好实现,就另外写了个函数传了个参数n。
代码实现如下:
class Solution {
public int longestDecompositionHelp(String text,int n) {
if (text.equals("")) return n;
int len = text.length();
for (int i = 0;i < len/2;i++) {
if (text.substring(0,i + 1).equals(text.substring(len - i - 1,len))) {
return longestDecompositionHelp(text.substring(i + 1,len - i - 1),n + 2);
}
}
return n + 1;
}
public int longestDecomposition(String text) {
return longestDecompositionHelp(text,0);
}
}