📅  最后修改于: 2023-12-03 15:40:33.896000             🧑  作者: Mango
回文子串是指从前往后读和从后往前读都一样的字符串。例如,字符串 "abba"、"racecar" 和 "noon" 都是回文子串。
现在的任务是检查给定字符串中的所有回文子串是否都是奇数长度。
我们可以通过枚举字符串中的每个字符,并向两边扩展来找到所有的回文子串。当找到回文子串时,我们可以判断其长度是否为奇数,如果是则继续检查下一个回文子串;如果不是,则判定为不符合条件,直接返回 false。
以下是一种基于中心扩展的实现方式:
public boolean checkPalindromicSubstrings(String s) {
for (int i = 0; i < s.length(); i++) {
if (!checkPalindromicSubstring(s, i, i)) return false; // 奇数长度回文子串
if (i < s.length() - 1 && !checkPalindromicSubstring(s, i, i + 1)) return false; // 偶数长度回文子串
}
return true;
}
private boolean checkPalindromicSubstring(String s, int left, int right) {
while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
return (right - left - 1) % 2 == 1; // 判断回文子串长度是否为奇数
}
时间复杂度:$O(n^2)$,其中 $n$ 为字符串的长度。
空间复杂度:$O(1)$。
本任务需要检查回文子串的长度是否都是奇数,我们可以通过枚举每个字符,并以它为中心向两边扩展来找到所有的回文子串。当找到回文子串时,判断其长度是否为奇数即可。时间复杂度为 $O(n^2)$,空间复杂度为 $O(1)$。