标签:ringbuf nbsp += har lse 第一个 put rom str
1 package algorithms; 2 3 import java.util.HashMap; 4 5 public class FirstAppearingOnce { 6 HashMap<Character,Integer> hm = new HashMap<>(); 7 StringBuffer sb = new StringBuffer(); 8 //Insert one char from stringstream 9 public void Insert(char ch) 10 { 11 if(hm.containsKey(ch)) { 12 hm.put(ch, hm.get(ch)+1); 13 }else { 14 hm.put(ch, 1); 15 } 16 sb.append(ch); 17 } 18 //return the first appearence once char in current stringstream 19 public char FirstAppearingOnce_1() 20 { 21 char[] str = sb.toString().toCharArray(); 22 for(int i=0;i<str.length;i++) { 23 if(hm.get(str[i])==1) { 24 return str[i]; 25 } 26 } 27 return ‘#‘; 28 } 29 }
其实也可以自己实现一个简易的hashmap用来解决该道题
因为char(8位)有256种取值 所以可以创建一个长度为256的数组 数组的下标即为ascii码值 数组的值即为出现的次数,如下所示:
int[] arr = new int[256]; StringBuffer s = new StringBuffer(); //Insert one char from stringstream public void Insert(char ch) { s.append(ch); arr[ch] +=1; }
标签:ringbuf nbsp += har lse 第一个 put rom str
原文地址:https://www.cnblogs.com/ustc-anmin/p/10630787.html