1.本题知识点
哈希表,ASCII码
2. 题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
3. 思路
把字母的ASCII码值当成索引建立哈希表(通过ASCII码映射到内存中唯一存储位置,存储记录的数组叫
散列表,即哈希表
(HashTable), 哈希算法
为ASCII码
)。
Java版本:
package com.algorithm.array;
public class FirstChar {
public static void main(String[] args) {
String str = "NXWtnzyoHoBhUJaPauJaAitLWNMlkKwDYbbigdMMaYfkVPhGZcrEwp";
System.out.println(firstNotRepeatingChar(str));
}
static int firstNotRepeatingChar(String str){
if(str == null || str.length() == 0) return -1;
char [] arr = str.toCharArray();
int size = 'z';
int [] hashTable = new int [size+1];
for(int i = 0 ; i < arr.length; i++){
hashTable[(int)arr[i]]++;
}
for(int i = 0 ; i < arr.length; i++){
if(hashTable[(int)arr[i]] == 1)
return i;
}
return -1;
}
}