面试题35:第一个只出现一次的字符

来源:互联网 发布:网络集线器怎么用 编辑:程序博客网 时间:2024/05/29 09:41
package com.abuge;/** * 面试题35:第一个只出现一次的字符 * 题目:在字符串中找出第一个只出现一次的字符,如输入"abaccdeff",则输出'b' */import java.util.HashMap;public class GetFirstOnceChar {public static char getFirstOnce(String str){if(str == null)return '0';HashMap<String, Integer> hashMap = new HashMap<String, Integer>();int len = str.length();//遍历字符串,统计字符串中各个字符出现的次数for(int i = 0; i < len; i++){String tmpStr = "" + str.charAt(i);if(hashMap.containsKey(tmpStr)){int value = hashMap.get(tmpStr);value++;hashMap.remove(tmpStr);hashMap.put(tmpStr, value);}else{hashMap.put(tmpStr, 1);}}//再次遍历字符串,查找出现次数等于1的字符for(int i = 0; i < len; i++){String tmpStr = "" + str.charAt(i);int value = hashMap.get(tmpStr);if(value == 1){System.out.println(str.charAt(i));return str.charAt(i);}}return '0';}//自定义哈希表public static char getFirstOnce_2(String str){if(str == null){return '0';}//只考虑ASCII码,故有256个字符int[] hashTable = new int[256];int len = str.length();//遍历字符串for(int i = 0; i < len; i++){char c = str.charAt(i);hashTable[c]++;}//遍历字符串查找第一个出现一次的字符for(int i = 0; i < len; i++){char c = str.charAt(i);if(hashTable[c] == 1){System.out.println(c);return c;}}return '0';}public static void main(String[] args) {System.out.println("单个字符:");getFirstOnce("a");getFirstOnce_2("a");System.out.println("不存在单个字符:");getFirstOnce_2("bbccddee");System.out.println("均是单个字符串:");getFirstOnce("bacde");getFirstOnce_2("bacde");System.out.println("存在出现一次的字符正常字符串:");getFirstOnce("abaccdeff");getFirstOnce_2("abaccdeff");System.out.println("null:");getFirstOnce(null);getFirstOnce_2(null);}}

0 0