- 去程(编码):
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;
}
}