题目描述
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置。如果字符串为空,返回-1
思路
- 暴力法很好解得;
- 你很容想到,遍历一遍记下出现的次数,由于字符不变,很容易也就想到了HashMap喽
代码
1234567891011121314151617static public int FirstNotRepeatingChar(String str) {if (str==null||str.length()==0)return -1;char a[] = str.toCharArray(); //这个数组是多余的内存消耗,应该写成str.charAt(index)获取当前字符HashMap<Character,Integer> hashMap = new HashMap();for (int i = 0; i < a.length; i++) {if (hashMap.containsKey(a[i])) //如果出现过hashMap.put(a[i],hashMap.get(a[i])+1); //将value+1;elsehashMap.put(a[i],0);}for (int i = 0; i < a.length; i++) { //hashmap是无序的,所以要按照原字符串的顺序寻找if (hashMap.get(a[i])==0)return i+1;}return 0;}
收获
- HashMap的使用,hash表真的是不可以放重复元素,就是说你加入即便,他都只有这么一个键值对,但是键值中的值是可以改变的,就像上面代码中的一样