lucastree 2016-07-22 08:18 采纳率: 0%
浏览 1332

哈希表查找问题,不区分大小写

问题要求如下:
输入格式:

输入第一行是一个正整数 N (1 <= N <= 100000),表示一共有 N 个用户名。接下来有 N 行,每一行是一个用户名,长度不超过 100,均由大写字母和小写字母组成。

输出格式:

请按照输入顺序输出,如果用户名在前面出现过则输出“Yes”,否则输出“No”,一行输出一个。

我的解答如下,并不能被系统AC,求问为什么。。。测试数据能过

#include
#include
#include
using namespace std;
class HashTable
{
private:
int size;
string* elem;
public:
HashTable()
{
size=200000;
elem=new string[size];
for(int i=0;i {
elem[i]="#";
}
}
~HashTable()
{
delete[] elem;
}
int hash(string& index)
{
int code=0;
for(size_t i=0;i {
if(isupper(index[i]))
index[i]=index[i] - 'A' + 'a';
}
for(size_t i=0;i {
code=(code*256+index[i]+128)%size;
}
return code;
}
bool search(string& index, int& pos, int& times)
{
pos=hash(index);
times=0;
while(elem[pos]!="#" && elem[pos]!=index)
{
times++;
if(times {
pos=(pos+1)%size;
}
else
{
return false;
}
}
if(elem[pos]==index)
{
return true;
}
else
{
return false;
}
}
int insert(string& index)
{
int pos,times;
if(search(index,pos,times))
{
return 2;
}
else if(times {
elem[pos]=index;
return 1;
}
else
{
recreate();
return 0;
}
}
void recreate()
{
string* temp_elem;
temp_elem=new string[size];
int copy_size=size;
for(int i=0;i {
temp_elem[i]=elem[i];
}
delete[] elem;
size=size*2;
elem=new string[size];
for(int i=0;i {
elem[i]="#";
}
for(int i=0;i {
if(temp_elem[i]!="#")
{
insert(temp_elem[i]);
}
}
delete[] temp_elem;
}
};
int main()
{
HashTable hashtable;
int n, temp_pos, temp_times;
cin>>n;
string buffer;
cin>>buffer;
hashtable.insert(buffer);
cout<<"NO"< for(int i=0;i {
cin>>buffer;
if(hashtable.search(buffer,temp_pos,temp_times))
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
hashtable.insert(buffer);
}
return 0;
}

  • 写回答

1条回答

  • mazegong 2016-07-22 08:57
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题