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

Java 字符統計核心邏輯:chars[i] - 'a' 索引映射原理圖解

     編輯:程式設計疑難解答

問題代碼片段

public static int[] countLetters(char[] chars) {
    int[] counts = new int[26]; // 26 個英文字母計數器
    for (int i = 0; i < chars.length; i++) {
        counts[chars[i] - 'a']++; // 核心邏輯
    }
    return counts;
}

原理:字符到數組索引的數學映射

計算機中字符本質是整數(ASCII/Unicode 碼)。小寫字母連續分佈:

'a' = 97, 'b' = 98, 'c' = 99 ... 'z' = 122

減法運算效果

字符 chars[i]ASCII 值chars[i] - 'a'數組索引
'a'9797 - 97 = 0counts[0] (存 'a' 個數)
'b'9898 - 97 = 1counts[1] (存 'b' 個數)
'c'9999 - 97 = 2counts[2] (存 'c' 個數)
............
'z'122122 - 97 = 25counts[25] (存 'z' 個數)

執行流程圖解

輸入字符數組: ['b', 'a', 'c', 'a', 'b']

初始 counts: [0, 0, 0, ..., 0] (長度 26)

i=0, char='b' (98) -> 索引 1 -> counts[1]++ -> [0, 1, 0, ...]
i=1, char='a' (97) -> 索引 0 -> counts[0]++ -> [1, 1, 0, ...]
i=2, char='c' (99) -> 索引 2 -> counts[2]++ -> [1, 1, 1, ...]
i=3, char='a' (97) -> 索引 0 -> counts[0]++ -> [2, 1, 1, ...]
i=4, char='b' (98) -> 索引 1 -> counts[1]++ -> [2, 2, 1, ...]

最終結果: a:2, b:2, c:1, 其他:0

前置條件與健壯性

  • 前提:輸入數組 只包含小寫字母。若含大寫、數字、符號,索引會越界或錯誤。
  • 改進:實際項目中應加邊界檢查:
char c = chars[i];
if (c >= 'a' && c <= 'z') {
    counts[c - 'a']++;
}

擴展:大小寫不敏感統計

char lower = Character.toLowerCase(chars[i]);
if (lower >= 'a' && lower <= 'z') {
    counts[lower - 'a']++;
}

總結

chars[i] - 'a' 巧妙利用字符編碼連續性,將字符直接映射為 0-25 索引,實現 O(1) 計數,是字符統計、詞頻分析、字母異位詞判斷等算法的經典技巧。

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