参考自:《剑指Offer——名企面试官精讲典型编程题》
题目:字符串中第一个只出现一次的字符
在字符串中找出第一个只出现一次的字符。如输入”abaccdeff”,则输出’b’。
主要思路:扫描字符串两次。第一次扫描,记录每个字符出现的次数。第二次扫描,获取每个字符的出现次数,则第一个出现次数为1的字符就是所求字符。可以使用哈希表或者数组来记录每个字符出现的次数。
关键点:可以基于数组构建哈希表
时间复杂度:O(n)
public class FirstNotRepeatingChar
{
public static void main(String[] args)
{
String[] strings = {
"abcdefg", //a
"aagbcdef", //g
"aabccdbd", //不存在
null
};
for (String s : strings)
{
char result = findFirstChar(s);
System.out.println(result);
}
}
private static char findFirstChar(String string)
{
if (string == null || string.equals("")) return '\0';
int[] records = new int[256];
for (int i = 0; i < string.length(); i++)
{
records[string.charAt(i)]++;
}
for (int i = 0; i < string.length(); i++)
{
char curChar = string.charAt(i);
//返回第一个只出现一次的字符
if (records[curChar] == 1) return curChar;
}
return '\0';
}
}