题目理解:
首先要通读题目,题目的意思是说遍历这个字符串,然后调用Insert 和 FirstAppearingOnce 函数,也就是说边插入边判断重复出现的字符串,最后输出的是caseout
解题思路:
1.插入函数主要的目的就是为了计数出现的次数,计算次数可以用多种形式,可以用hashmap,也可以使用String
1)采用hashmap的方式,key存储的是char,value存储的是次数
2)采用数组的方式,字符串的下标是字符串,value存储的是次数
2.查找第一个不重复的字符
遍历字符串或者list,当次数为1,则将其返回出来,如果没有次数为1的,则返回的是‘#’
注意:此处字符串和list,只是存储输入进来的字符串
方式一:
import java.util.*;
public class Solution {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
ArrayList<Character> list = new ArrayList<Character>();
//Insert one char from stringstream
public void Insert(char ch)
{
if(map.containsKey(ch)){
map.put(ch,map.get(ch)+1);
}else{
map.put(ch,1);
}
list.add(ch);
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
for (Character i : list){
if (map.get(i)==1){
return i;
}
}
return '#';
}
}
方式二:
import java.util.*;
public class Solution {
public int[] arr = new int[256];
StringBuffer sb = new StringBuffer();
//Insert one char from stringstream
public void Insert(char ch)
{
sb.append(ch);
if(arr[ch]==0){
arr[ch]=1;
}else{
arr[ch]+=1;
}
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
char[] arr2 = sb.toString().toCharArray();
for(char c:arr2){
if(arr[c]==1){
return c;
}
}
return '#';
}
}