剑指offer32--找出第一个只出现一次的字符

来源:互联网 发布:网络通俗歌手大赛冠军 编辑:程序博客网 时间:2024/06/07 18:59

题目:在字符串中找出第一个只出现一次的字符。

例子:

比如在{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、新建HashMapHashMap<Character, Integer> hashmap = new HashMap<Character, Integer>();// 2、遍历数组,将对应的key和value存到HashMapstoreInMap(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置1hashmap.put(ary[i], 1);}else if(hashmap.get(ary[i]) != null){// 在有该元素的情况下,该元素的value加上1int 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的第一个keywhile(hashmap.get(ary[i]) != 1){i++;}return ary[i];}}

根据思路写code

1 0