字符流中第一个不重复的字符
题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
思考: 要想得到字符流中第一个只出现一次的字符,如果想要得到只出现一次的字符,简单,用HashMap, 字符作为Key,出现次数作为 value,
可是第一个怎么办? HashMap存储数据是无序的!! 按照字符的输入字符的顺序进行遍历
public class Solution { private int[] count=new int[256]; StringBuilder sb=new StringBuilder(); HashMap<Character,Integer> map=new HashMap<>(); //Insert one char from stringstream public void Insert(char ch) { if(map.containsKey(ch)) map.put(ch,2); else map.put(ch,1); sb.append(ch); } //return the first appearence once char in current stringstream public char FirstAppearingOnce() { String str=sb.toString(); for(int i=0;i<str.length();i++){ if(map.get(str.charAt(i))==1) return str.charAt(i); } return '#'; } }
那么,可以直接用 数组啊!!! 数组下标就是 hash.
public class Solution { private int[] arr=new int[256]; private StringBuilder sb=new StringBuilder(); //Insert one char from stringstream public void Insert(char ch) { int index=ch-'0'; arr[index]++; sb.append(ch); } //return the first appearence once char in current stringstream public char FirstAppearingOnce() { String str=sb.toString(); for(int i=0;i<str.length();i++){ if(arr[str.charAt(i)-'0']==1) return str.charAt(i); } return '#'; } }
正确版!! 应该用 '/0' 而不是 ’0‘
public class Solution { private int[] arr=new int[256]; private StringBuilder sb=new StringBuilder(); //Insert one char from stringstream public void Insert(char ch) { int index=ch-'\0'; arr[index]++; sb.append(ch); } //return the first appearence once char in current stringstream public char FirstAppearingOnce() { String str=sb.toString(); for(int i=0;i<str.length();i++){ if(arr[str.charAt(i)-'\0']==1) return str.charAt(i); } return '#'; } }
也许会有遗憾,但是不应该在失败之前
浙公网安备 33010602011771号