题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。如果当前字符流没有存在出现一次的字符,返回#字符。
分析:
可以使用hashmap来存放字符键,值为出现的次数。
package Solution42;
import java.util.HashMap;
//请实现一个函数用来找出字符流中第一个只出现一次的字符。
// 例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。
// 当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
public class Solution {
HashMap<Character,Integer> hashMap=new HashMap<>();
StringBuffer sb=new StringBuffer();
//Insert one char from stringstream
public void Insert(char ch)
{
sb.append(ch);
if(hashMap.containsKey(ch)){
int count=hashMap.get(ch);
hashMap.put(ch,++count);
}else{
hashMap.put(ch,1);
}
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
char[] chars=sb.toString().toCharArray();
for(int i=0;i<chars.length;i++){
if(hashMap.get(chars[i])==1){
return chars[i];
}
}
return '#';
}
public static void main(String[] args) {
Solution s=new Solution();
char[] chars={'g','o','o','g','l','e'};
for(int i=0;i<chars.length;i++){
s.Insert(chars[i]);
System.out.println(s.FirstAppearingOnce());
}
}
}