看到很多讨论代码中FirstAppearingOnce()方法中都是这样写的:
for(char ch : str) | for(int i=0;i<size;++i)
真的是... emmm...
【澄清】offer书上代码中occurrence[i]数组有两个作用,很是巧妙:
- 记录字符出现的次数;
- 记录字符出现的次数。
特此,我分别用两个数组来表示,如下:
public class Solution {
int[] count = new int[256]; // 字符出现的次数
int[] index = new int[256]; // 字符出现的次数
int number = 0;
public void Insert(char ch) {
count[ch]++;
index[ch] = number++;
}
public char FirstAppearingOnce() {
int minIndex = number;
char ch = '#';
for (int i = 0; i < 256; i++) { // !!!
if (count[i] == 1 && index[i] < minIndex) {
ch = (char) i;
minIndex = index[i];
}
}
return ch;
}
}
京公网安备 11010502036488号