考察点
知识点
题目
分析
这道题目求字符串中第一个只出现一次的字符,如果我们循环遍历字符串,依次和其余字符比较,这样的时间复杂度非常长。类似这种题目思维一定要想着如何能够拿空间换时间。如果我们能有一个哈希表,key对应字符串中每个字符信息,value对应它出现的次数,那么当统计出每个字符的次数以后,再遍历一遍就能拿到第一个只出现一次的字符了,俩次O(n)遍历就可以搞定。java字符用的是Unicode编码,每个字符占用2个字节,要想覆盖到全部字符,需要一个长度为65536的int类型的数组,就可以充当这个哈希表的角色
java
public class ThirtyFive {
public static void main(String[] args) {
String str = "abaccdeff";
getOne(str);
}
public static void getOne(String str) {
int[] count = new int[65535];
for (int i = 0;i<str.length();i++) {
count[str.charAt(i)]++;
}
for (int i = 0;i<str.length();i++) {
if(count[str.charAt(i)] == 1) {
System.out.println(str.charAt(i));
break;
}
}
}
}