题目:在字符串中找出第一个只出现一次的字符。
例子:
比如在{1,2,4,5,1,2,3,4,1,6}中第一次出现且只有一个的是5
比如在{'a','b','c','d','a','c','a','e'}中第一次出现且只有一个的是b
思路:
1、新建一个HashMap容器来存放每个字符具体内容(key)和对应出现出现的次数(value)
2、遍历字符数组,将每个元素和对应的次数存入HashMap
3、第二次遍历数组,找到第一个value为1的key,也就是找到第一个次数为1的元素
package 剑指offer; import java.util.HashMap; /*题目:在字符串中找出第一个只出现一次的字符。 比如在{1,2,4,5,1,2,3,4,1,6}中第一次出现且只有一个的是5 比如在{'a','b','c','d','a','c','a','e'}中第一次出现且只有一个的是b*/ public class Test35 { public static void main(String args[]){ char array1[] = new char[]{1, 2, 4, 5, 1, 2, 3, 4, 1, 6}; System.out.println("The Number Is: "+findOneFreqChar(array1)); char array2[] = new char[]{'a', 'b', 'c', 'd', 'a', 'c', 'a', 'e'}; System.out.println("The Char Is: "+(char)findOneFreqChar(array2)); } public static int findOneFreqChar(char ary[]){ // 0、边界情况判断 if(ary == null || ary.length <= 0){ System.out.println("ary[] Error");; } // 1、新建HashMap HashMap<Character, Integer> hashmap = new HashMap<Character, Integer>(); // 2、遍历数组,将对应的key和value存到HashMap storeInMap(ary, hashmap); // 3、扫描hash表,找到value为1的取出 return scanHashMap(hashmap, ary); } public static void storeInMap(char []ary, HashMap<Character, Integer> hashmap){ int leng = ary.length; for(int i = 0; i < leng; i++){ if(hashmap.get(ary[i]) == null){ // 在没有该元素的情况下,该元素的value置1 hashmap.put(ary[i], 1); }else if(hashmap.get(ary[i]) != null){ // 在有该元素的情况下,该元素的value加上1 int temp = hashmap.get(ary[i]); temp++; hashmap.put(ary[i], temp); } } } public static int scanHashMap(HashMap<Character, Integer> hashmap, char ary[]){ int i = 0; // 扫描hashmap,找到value为1的第一个key while(hashmap.get(ary[i]) != 1){ i++; } return ary[i]; } }