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

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

例子:

比如在{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];
	}
}

根据思路写code

你可能感兴趣的:(java,数组,次数为1的第一个字符)