篩選用戶名

題面

參見 http://www.jisuanke.com/course/35/5428


解法

直接使用jisuanke CS261實現(xiàn)的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;
}

對于所有輸入的字符串,首先進行一次統(tǒng)一的大小寫轉換,全都轉化成小寫再來進行判斷。


代碼

#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;
}
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,890評論 0 33
  • 小編費力收集:給你想要的面試集合 1.C++或Java中的異常處理機制的簡單原理和應用。 當JAVA程序違反了JA...
    八爺君閱讀 5,172評論 1 114
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,665評論 0 4
  • 解釋永遠都是多余, 理解你的人不需要, 不理解你的人沒必要。 付出真心,才會得到真心, 卻也可能傷得最徹底。 保持...
    龍行天下2688閱讀 198評論 0 1
  • 下筆不知道說什么------ 說說昨晚做的一個夢吧: 好朋友要在昆山買房,問我買不。我說限購,要交一年社保才有資格...
    果石媽閱讀 191評論 2 2

友情鏈接更多精彩內(nèi)容