美文网首页
筛选用户名

筛选用户名

作者: qratosone | 来源:发表于2016-05-31 01:02 被阅读0次

题面

参见 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;
}

相关文章

  • 筛选用户名

    题面 参见 http://www.jisuanke.com/course/35/5428 解法 直接使用jisua...

  • 搜索筛选系统

    登录 根据用户名查询数据库,若符合才能进入主界面 主界面 搜索与筛选功能 搜索筛选框每一个空白的输入框都是搜索筛选...

  • 餐厅点餐系统功能分析

    界面1 登录界面(用户名、密码、验证码(需改进)、登录按钮) 界面2(管理员) 顾客结账选项卡:特色菜品(筛选特色...

  • JQuery遍历表格获取单元格内容拼接json的Ajax传值

    用户名 流水 用户名 流水 用户名 流水 用户名 流水 $(function(){ v...

  • jQuery篇之获取jQuery对象

    获取 筛选器 基本筛选器 内容筛选器 可见性筛选选择器 属性筛选器 子元素筛选器 表单元素筛选器 表单对象属性筛选选择器

  • 默认口令汇总

    通用: 用户名 密码 华为: 用户名 密码: 天融信: 用户名: 密码: 安恒: 用户名: 密码: 深信服: 奇安...

  • JQuery筛选器大全及介绍

    选择对象1).基本 2).表单 筛选条件1).属性筛选 2).内容筛选 3).层级筛选 4).方法筛选

  • linux创建用户

    useradd -d 目录 -m 用户名 passwd 用户名 【设置密码】 userdel -r 用户名 ...

  • EXCLE 数据处理~3月精进(二)

    六、筛选与高级筛选 1、自动筛选:数字、文本、颜色等条件筛选。 (注意:文本筛选——开头是——C*或C?的输入C~...

  • ReactiveCocoa的用法

    用户名和密码 用户名, 密码, 其他

网友评论

      本文标题:筛选用户名

      本文链接:https://www.haomeiwen.com/subject/saecdttx.html