您的位置:首页 > 职场人生

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

2014-09-05 10:05 369 查看
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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: