解题思路:
1.用数组来保存字符出现的次数,数组的下标对应相应的字符。
2.用队列来保存第一次出现的字符。
3.从队列的队头开始判断,如果队头字符所对应的出现次数不为1,则删除对头,判断下一个,否则,队头的字符就是第一个不重复的字符。
class Solution
{
public:
int arr[256];
queue<char> q;
Solution()
{
//初始化为0
// memset(arr,0,sizeof(arr));
for(int i=0;i<256;++i)
arr[i]=0;
}
//Insert one char from stringstream
void Insert(char ch)
{
arr[ch-'\0']+=1; //'\0'的ASCII为0,'0'的ASCII为48
if(arr[ch-'\0']==1) //第一次出现
{
q.push(ch);
}
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce()
{
while(!q.empty()&&(arr[q.front()-'\0']>=2))
q.pop();
if(q.empty())
return '#';
return q.front();
}
};