您的位置:首页 > 职场人生

剑指offer 面试题55 字符流中第一个不重复的字符(push_back+resize出问题)

2016-12-17 00:21 253 查看
这道题考察对哈希表的应用.

总结如下:

1. 解题思路为,大小为256的hash.

hash_table[i]=value 为例

i表示对应字符

value表示此字符未出现,出现过一次,出现过多次.

value==-1:未出现

value>=0:出现过一次并且出现的顺序=value

value==-1:出现过多次

2.关于STL vector,原来resize和push_back一起使用是会出大问题的.

第一种情况(resize+push_back)

std::vector<int> a;
a.resize(2);
a.push_back(1);
a.push_back(2);
std::vector<int>::iterator itr=a.begin();
for(;itr!=a.end();itr++){
std::cout<<*itr<" ";
}


结果:

0 0 1 2

第二种情况:不要resize

std::vector<int> a;
a.push_back(1);
a.push_back(2);
std::vector<int>::iterator itr=a.begin();
for(;itr!=a.end();itr++){
std::cout<<*itr<<std::endl;
}


第三种情况:不要push_back

std::vector<int> a;
a.resize(2);
a[0]=1;
a[1]=2;
std::vector<int>::iterator itr=a.begin();
for(;itr!=a.end();itr++){
std::cout<<*itr<<std::endl;
}


上面二,三种代码都可以正确结果

1 2

3.int最大值:0x7fffffff;

下面是代码

class Solution
{
public:
//Insert one char from stringstream
Solution():index(0){
for(int i=0;i<256;i++){
str_table.push_back(-1);
}
}
void Insert(char ch) {
if(str_table[ch]==-1){
str_table[ch]=index;
}else{
str_table[ch]=-2;
}
index++;
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce() {
int min=0x7fffffff;
char current_char='#';
for(int i=0;i<256;i++){
if(str_table[i]>=0 && str_table[i]<min){
current_char=(char)i;
min=str_table[i];
}
}
return current_char;
}

private:
int index;
std::vector<int> str_table;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: