1.题目描述
2.思路
思路1:
判断一个字符串中的字母个数是否是偶数个。
遍历字符串,检查每个字符是否是字母(可以通过 Character.isLetter() 来判断)。
累加字母的个数。
最后判断字母的个数是否是偶数。
思路2:
这段 Java 代码的作用是 统计字符 c 在 freqMap 中的出现次数,并将结果存储在 reqMap 中
reqMap.put(c, freqMap.getOrDefault(c, 0) + 1);
freqMap.getOrDefault(c, 0):
这个方法在 freqMap 中查找键 c 的值。
如果 freqMap 包含 键 c,则返回其对应的值(即 c 的计数)。
如果 不包含,则返回 0(默认值)。
对 c 的计数加 1,表示 c 又出现了一次。
reqMap.put(c, …):
将更新后的计数值存入 reqMap,键为 c,值为 freqMap 里 c 的当前计数加 1。
思路3:
m.values() 返回的是 Map 中所有值的集合。在你的代码中,它用于获取每个字符的出现次数,并基于这些次数来计算最大回文串的长度。
3.java代码实现
class Solution {public int longestPalindrome(String s) {// cnt[c-'a']++;// // 判断字母个数是否为偶数// 将字符转换为小写字母,确保不会有大写字母引发错误// c = Character.toLowerCase(c);// // 如果是字母才进行处理// if (c >= 'a' && c <= 'z') {// cnt[c - 'a']++;// }// Create a map to store the frequency of each characterHashMap<Character, Integer> m = new HashMap<>();for( char c: s.toCharArray()){m.put(c,m.getOrDefault(c,0)+1);//freqMap.getOrDefault(c, 0),这个方法在 freqMap 中查找键 c 的值。如果 freqMap 包含 键 c,则返回其对应的值(即 c 的计数)。如果 不包含,则返回 0(默认值)。+ 1:对 c 的计数加 1,表示 c 又出现了一次。}int length=0;Boolean hasOdd=false;// 是否有一个字符是奇数次// 初始化为 false,表示当前没有奇数次出现的字符for(int count:m.values()){// freqMap.values()它返回 Map 中所有值的集合。具体来说,freqMap 是一个 HashMap,它的键是字符,值是每个字符的出现次数。通过 freqMap.values(),我们可以获取到所有字符的出现次数。if(count%2==0){length=length+count;}else{length=length+count-1;hasOdd=true;}}// 如果有奇数次的字符,可以在回文的中间放一个,长度加 1if(hasOdd==true){length=length+1;}return length;}
}