请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
解题思路
- 空间换时间,用一个HashMap来保存每个字符出现的次数
上代码(Java很实用)
package zr.offer;
import java.util.HashMap;
public class Num50_2 {
private HashMap<Character, Integer> map = new HashMap<>();
private StringBuffer stringBuffer = new StringBuffer();
public static void main(String[] args) {
// TODO Auto-generated method stub
Num50_2 num50_2 = new Num50_2();
num50_2.Insert('g');
num50_2.Insert('o');
System.out.println(num50_2.FirstAppearingOnce());
num50_2.Insert('o');
num50_2.Insert('g');
num50_2.Insert('l');
num50_2.Insert('e');
System.out.println(num50_2.FirstAppearingOnce());
}
public void Insert(char ch)
{
stringBuffer.append(ch);
if(map.containsKey(ch))
map.put(ch, -1);
else
map.put(ch, stringBuffer.length() - 1);
}
public char FirstAppearingOnce()
{
char ans = '#';
if(stringBuffer.length() < 1)
return ans;
for(int i = 0; i < stringBuffer.length(); i++)
if(map.get(stringBuffer.charAt(i)) != -1) {
ans = stringBuffer.charAt(i);
break;
}
return ans;
}
}