目录结构
1.题目
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa"
不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例:
输入:
"abccccdd"
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.题解
回文串关于回文中心左右对称:
- 当回文串长度为偶数时,回文中心为最中间两个字符之间的间隔;
- 当回文串长度为奇数时,回文中心为最中间的字符。
因此一个回文串最多只有一个字符出现奇数次(当长度为奇数时),其余均为偶数次。
public class Solution409 {
@Test
public void test409() {
System.out.println(longestPalindrome("abbbcddd"));
}
public int longestPalindrome(String s) {
int[] count = new int[128];
for (char c : s.toCharArray()) {
count[c]++;
}
int result = 0;
for (int n : count) {
result += n / 2 * 2;
if (result % 2 == 0 && n % 2 == 1) {
result++;
}
}
return result;
}
}
- 时间复杂度:
- 空间复杂度: