在 Java 處理字母統計、字母映射問題時,常見 int idx = c[i] - 'a'; 這類表達式。本文解釋其原理,並結合完整代碼展示實際用法。
char ch = 'd';
int index = ch - 'a'; // 結果為 3
原理:字符在內存中以 Unicode/ASCII 碼值存儲。'a' = 97,'d' = 101,相減得 4,即字母在字母表中的從 0 開始的索引(a→0, b→1, ..., z→25)。
int[] cnt = new int[26];
for (char ch : str.toCharArray()) {
if (ch >= 'a' && ch <= 'z') {
cnt[ch - 'a']++;
}
}
// cnt[0] 存 'a' 的次數,cnt[25] 存 'z' 的次數
提供的代碼完整邏輯為:
n 和字符串 s。b[26]。k,若 k >= 2 則無法構成回文,輸出 "Impossible"。changes() 計算將字符串調整為回文所需的最小交換次數(類似最小相鄰交換使字符串成回文)。ch - 'A',或先 Character.toLowerCase()。Character.isLetter(ch)。char 是無符號 16 位,直接相減結果為 int,無溢出風險。// 任意字符集映射到 0..N-1
Map<Character, Integer> map = new HashMap<>();
int idx = 0;
for (char ch : charset) map.put(ch, idx++);
// 使用
int id = map.getOrDefault(ch, -1);
掌握 ch - 'a' 這一慣用模式,能大幅簡化字母相關算法的實現。