筛选用户名

题面

参见 http://www.jisuanke.com/course/35/5428


解法

直接使用jisuanke CS261实现的HashTable类
其Hashing计算公式为:

int hash(string &index) {
        int code = 0;
        for (size_t i = 0; i < index.length(); i++) {
            code = (code * 256 + index[i] + 128) % size;
        }
        return code;
}

对于所有输入的字符串,首先进行一次统一的大小写转换,全都转化成小写再来进行判断。


代码

#include <iostream>
#include <string>
using namespace std;
class HashTable {
private:
    string *elem;
    int size;
public:
    HashTable() {
        size = 200000;
        elem = new string[size];
        for (int i = 0; i < size; i++) {
            elem[i] = "#";
        }
    }
    ~HashTable() {
        delete[] elem;
    }
    int hash(string &index) {
        int code = 0;
        for (size_t i = 0; i < index.length(); 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 < size) {
                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 < size / 2) {
            elem[pos] = index;
            return 1;
        }
        else {
            return 0;
        }
    }

};
string toLower(string &input) {
    string output=input;
    for (size_t i = 0; i<input.length(); i++) {
        if (input[i] >= 'A'&&input[i] <= 'Z') {
            output[i] = input[i] - 'A' + 'a';
        }

    }
    return output;
}
int main() {
    HashTable hashtable;
    string buffer;
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> buffer;
        string input = toLower(buffer);
        int ans = hashtable.insert(input);
        if (ans == 1) {
            cout << "No" << endl;
        }
        if (ans == 2) {
            cout << "Yes" << endl;
        }
    }

    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,357评论 0 33
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 10,225评论 1 114
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,862评论 0 4
  • 解释永远都是多余, 理解你的人不需要, 不理解你的人没必要。 付出真心,才会得到真心, 却也可能伤得最彻底。 保持...
    龙行天下2688阅读 1,441评论 0 1
  • 下笔不知道说什么------ 说说昨晚做的一个梦吧: 好朋友要在昆山买房,问我买不。我说限购,要交一年社保才有资格...
    果石妈阅读 1,382评论 2 2

友情链接更多精彩内容