public class FirstShowOnlyOnceElement { /**Q17.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b * 1.int[] count:count[i]表示i对应字符出现的次数 * 2.将26个英文字母映射:a-z <--> 0-25 * 3.假设全部字母都是小写 */ public static void main(String[] args) { String str="abaccdeff"; int index=find(str); if(index!=-1){ char firstShowOnlyOnceElement=str.charAt(index);//charAt() source code:return value[index + offset]; System.out.println(firstShowOnlyOnceElement); } } //return the index of firstShowOnlyOnceElement public static int find(String str){ if(str==null||str.length()==0){ return -1; } int len=str.length(); char[] letters=str.toCharArray(); //In java,'char' is 16 bits,so there are 2^16 characters. //But we deal with only the 26 English letters in this case. int[] count=new int[26];//the 'HashTable' for(int i=0;i<len;i++){ char curChar=letters[i]; count[curChar-'a']++; } for(int i=0;i<len;i++){ char curChar=letters[i];//iterate the string,not the HashTable if(count[curChar-'a']==1){ return i; } } return -1; } }