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;}
}