首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 字符運算技巧:`c[i] - 'a'` 的含義與應用場景

     編輯:程式設計疑難解答

在 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' 的次數

題目代碼解析

提供的代碼完整邏輯為:

  1. 讀入長度 n 和字符串 s。
  2. 統計每個小寫字母出現次數到 b[26]。
  3. 檢查出現奇數次的字母種類數 k,若 k >= 2 則無法構成回文,輸出 "Impossible"。
  4. 否則調用 changes() 計算將字符串調整為回文所需的最小交換次數(類似最小相鄰交換使字符串成回文)。

注意事項

  • 僅適用於 小寫字母;大寫需用 ch - 'A',或先 Character.toLowerCase()。
  • 若輸入可能包含非字母,需先判斷 Character.isLetter(ch)。
  • Java 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' 這一慣用模式,能大幅簡化字母相關算法的實現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved