题目
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
思路1
使用整型数组对出现次数进行统计,当然也可以使用map记录每个字符出现的次数。
/**
* 使用整型数组对出现次数进行统计
* 对应ASCII码表的256个字符
* 数组的index就是字符, 值为字符出现的次数
*/
public int firstOnceAppearChar2(String str) {
int[] cnts = new int[256];
for (int i = 0; i < str.length(); i++) cnts[str.charAt(i)]++;
for (int i = 0; i < str.length(); i++) if (cnts[str.charAt(i)] == 1) return i;
return -1;
}
思路2
使用BitSet对出现次数进行统计。
/**
* 使用BitSet对出现次数进行统计 0,1,...
* 对应ASCII码表的256个字符
*/
public int firstOnceAppearChar1(String str) {
BitSet bs1 = new BitSet(256);
BitSet bs2 = new BitSet(256);
for (char c : str.toCharArray()) {
if (!bs1.get(c) && !bs2.get(c)) {
bs1.set(c); // 0 0
} else if (bs1.get(c) && !bs2.get(c)) {
bs2.set(c); // 0 1
}
}
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (bs1.get(c) && !bs2.get(c))
return i;
}
return -1;
}