动态规划 切满足k长度的回文串的最大数量

62 阅读1分钟

题目

image.png

  • 从左往右的递归模型,当前位置开始如果满足大于等于k长度且是字符串就切,在切完后继续以切完往后的k个位置为起点继续判断
	public static int maxPalindromes1(String s, int k) {
		if (s == null || s.length() == 0) {
			return 0;
		}
		char[] str = s.toCharArray();
		return process1(str, 0, k);
	}

	public static int process1(char[] str, int index, int k) {
		if (str.length - index < k) {
			return 0;
		}
                // 从左往右遍历
		int ans = process1(str, index + 1, k);
                // 从当前位置往后的 k 个数为起点,判断是否满足回文,满足就切
		for (int i = index + k - 1; i < str.length; i++) {
			if (isPalindrome(str, index, i)) {
				ans = Math.max(ans, 1 + process1(str, i + 1, k));
			}
		}
		return ans;
	}

	public static boolean isPalindrome(char[] str, int L, int R) {
		while (L < R) {
			if (str[L++] != str[R--]) {
				return false;
			}
		}
		return true;
	}