
本文介绍一种不使用数组的纯字符串操作方法,实现从用户输入的句子中提取指定长度的首个回文子串,并提供完整、健壮的 java 实现。
要实现“根据用户指定长度提取回文子串”,核心思路是:遍历原字符串所有可能的连续子串(长度等于用户输入值),逐个判断是否为回文,找到第一个即返回。注意,题目明确禁止使用数组(包括 char[]),因此我们全程采用 String 和 StringBuilder 进行操作——后者 .reverse() 方法是安全且高效的字符串翻转工具,不违反约束。
以下是推荐实现:
public String printPalindrome(String sentence, int size) {
// 边界校验:负长度无意义,超长则截断为句子本身长度
if (size < 0) return "";
if (size > sentence.length()) size = sentence.length();
// 遍历所有长度为 size 的连续子串(起始索引 i 从 0 到 sentence.length() - size)
for (int i = 0; i + size <= sentence.length(); i++) {
String miniStr = sentence.substring(i, i + size);
String reverseStr = new StringBuilder(miniStr).reverse().toString();
// 区分大小写敏感匹配(如题目示例中 "cec" 与原句无关,仅关注子串自身回文性)
if (miniStr.equals(reverseStr)) {
return miniStr;
}
}
// 未找到符合条件的回文子串
return "";
}✅ 关键说明:
- 该方法不依赖任何数组,完全基于 String.substring() 和 StringBuilder.reverse();
- 自动处理边界情况:size ≤ 0 返回空字符串,size > sentence.length() 时自动降级为全句长度;
- 子串回文判断严格按字符顺序比对(区分大小写),若需忽略大小写,可改为 miniStr.equalsIgnoreCase(reverseStr);
- 返回的是首个匹配的回文子串,符合题目“Here is your palindrome”语义;
- 时间复杂度为 O(n × size),空间复杂度为 O(size),高效且易于理解。
⚠️ 注意:原始问题中提到的示例(输入 "racecar" 和 3 得到 "cec")存在逻辑偏差——"cec" 并非 "racecar" 的子串,而是误将中间对称字符拼接。本实现严格遵循子串连续性原则,确保结果真实存在于原字符串中,更符合工程实践要求。










