tags:
- 字符串
categories: - 数据结构与算法
题目:
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入:
"abccccdd"
输出:
7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题1(需要判断奇偶):
class Solution {
public int longestPalindrome(String s) {
HashMap<Character, Integer> map = new HashMap<>();
char[] ch = s.toCharArray();
for (char c : ch) {
if (!map.containsKey(c)) {
map.put(c, 0);
}
map.put(c,map.get(c)+1);
}
int length = 0;
boolean odd = false;
for (int i :map.values()){
if (i%2 == 1)
odd = true;
length += i/2 *2;
}
if (odd)
length++;
return length;
}
}
解题2(不需要判断奇偶):
class Solution {
public int longestPalindrome(String s) {
HashMap<Character, Integer> map = new HashMap<>();
char[] ch = s.toCharArray();
for (char c : ch) {
if (!map.containsKey(c)) {
map.put(c, 0);
}
map.put(c,map.get(c)+1);
}
int length = 0;
for (int i :map.values()){
length += i/2 *2;
}
if (length < s.length())
length++;
return length;
}
}