剑指offer----字符流中第一个不重复的字符
2017-05-18 00:54
351 查看
解题思路:
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();
}
};
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();
}
};
相关文章推荐
- (剑指offer)字符流第一个不重复的字符C++
- 《剑指offer》:[55]字符流中第一个不重复的字符
- 《剑指offer》字符流中第一个不重复的字符
- 剑指offer:字符流中第一个不重复的字符
- 剑指offer(51)-字符流中第一个不重复的字符
- 剑指Offer——字符流中第一个不重复的字符
- 《剑指Offer》面试题55:字符流中第一个不重复的字符
- 剑指offer(五十四)之字符流中第一个不重复的字符
- 剑指offer——面试题55:字符流中第一个不重复的字符
- 《剑指offer》——字符流中第一个不重复的字符
- 剑指offer系列之53:字符流中第一个不重复的字符
- 剑指offer-字符流中第一个不重复的字符
- 《剑指offer》刷题笔记(字符串):字符流中第一个不重复的字符
- 剑指Offer--055-字符流中第一个不重复的字符
- 剑指offer 面试题55 字符流中第一个不重复的字符(push_back+resize出问题)
- 剑指offer-面试题55:字符流中第一个不重复的字符
- 剑指offer-字符流中第一个不重复的字符
- 剑指offer(57):字符流中第一个不重复的字符
- 剑指offer——面试题55:字符流中第一个不重复的字符
- 剑指offer系列之五十三:字符流中第一个不重复的字符