• 去程(编码)int index = ch - 'a';
  • 回程(解码)char ch = (char) (index + 'a');通过数组下标数字转换成字符是用char 强转(见下面代码)
  • 将字符‘0’转换成数字 0, int digit = digits.charAt(index) - ‘0’;3.电话号码
  • 用数组来存储字符最后一次出现的位置(for 覆盖)4._划分字母区间
  • 字符串数组字典3.电话号码
  • 单词list 放进 map 可以快速查看存不存在 string 字符串6._单词拆分
import java.util.*;
 
class Solution {
    public char[] topKFrequent(String s, int k) {
        // 1️⃣ 第一步:用数组代替 Map 进行统计 (核心优化)
        // 索引 0 代表 'a',索引 1 代表 'b'... 值代表出现次数
        int[] count = new int[26];
        
        for (char c : s.toCharArray()) {
            count[c - 'a']++; 
        }
 
        // 2️⃣ 第二步:依然使用小顶堆 (或者直接排序)
        // 这里的堆存的是 Character,比较的时候去 count 数组查频率
        PriorityQueue<Character> heap = new PriorityQueue<>(
            (c1, c2) -> count[c1 - 'a'] - count[c2 - 'a'] // 频率升序
        );
 
        // 3️⃣ 遍历 26 个字母
        // 注意:这里不用遍历字符串 s 了,只需要遍历 'a' 到 'z' 这 26 个坑位
        for (int i = 0; i < 26; i++) {
            if (count[i] > 0) { // 只处理出现过的字母
                char c = (char) ('a' + i); // 还原回字符
                heap.offer(c);
                if (heap.size() > k) {
                    heap.poll();
                }
            }
        }
 
        // 4️⃣ 导出结果
        char[] res = new char[k];
        for (int i = k - 1; i >= 0; i--) {
            res[i] = heap.poll();
        }
        return res;
    }
}