题目描述:在字符串中找出第一个只出现一次的字符。
思路:第一个只出现一次的字符是关键,就意味着需要所有的字符进行出现次数的统计,所以我们需要两次遍历:第一次获取每个字符出现的次数;第二次把第一个只出现一次的字符找到。在Java中可以通过HashMap实现对每个字符次数的统计,由于在题目中并没有我们限定使用Java提供的内置结构,所以可以通过这种办法迅速找到第一个只出现一次的字符。 也可以自己定义一个非常简单的哈希表,根据ASCLL码值作为数组的下标对应数组的一个数字,而数组中存储的是每个字符出现的次数。
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
if(str == null || str.length() == 0){
return -1;
}
int position = -1;;
char [] array = str.toCharArray();
int[] hash = new int[256];
for(int i = 0;i < hash.length;i++){
hash[i] = 0;
}
for(int i = 0;i < array.length;i++){
int ascll = (int)array[i];
hash[ascll]++;
}
for(int i = 0;i<array.length;i++){
int ascll = (int)array[i];
if(hash[ascll] == 1){
position = i;
break;
}
}
return position;
}
}
举一反三:如果要判断多个字符是不是在某个字符串里出现过或者统计多个字符在字符串中出现的次数,可以考虑基于数组创建一个简单的哈希表,可以用很小的空间还来时间效率上的提升。