Danh sách các ổ khóa khác nhau và một danh sách các khóa khác được cung cấp. Nhiệm vụ của chúng tôi là tìm sự khớp chính xác của ổ khóa và chìa khóa từ danh sách đã cho và gán chìa khóa đó với ổ khóa khi nó đúng.
Trong cách tiếp cận này, chúng tôi sẽ duyệt qua tất cả các ổ khóa và tạo một bản đồ băm, sau đó, mỗi khóa được tìm kiếm trong bản đồ băm. Khi khóa khớp với nhau, thì khóa đó được đánh dấu là khóa hợp lệ và được chỉ định bằng một ổ khóa.
Đầu vào và Đầu ra
Input: The lists of locks and keys. lock = { ),@,*,^,(,%, !,$,&,#} key = { !, (, #, %, ), ^, &, *, $, @ } Output: After matching Locks and Keys: Locks: ! ( # % ) ^ & * $ @ Keys: ! ( # % ) ^ & * $ @
Thuật toán
lockAndKeyProblem(lock, key, n)
Đầu vào: Danh sách ổ khóa, danh sách chìa khóa, n.
Đầu ra: Tìm chìa khóa dùng cho ổ khóa nào.
Begin define hashmap for i in range (0 to n-1), do hashmap[lock[i]] := i //set hashmap for locks done for i in range (0 to n-1), do if key[i] is found in the hashmap, then lock[i] = key[i] done End
Ví dụ
#include<iostream> #include<map> using namespace std; void show(char array[], int n) { for(int i = 0; i<n; i++) cout << array[i] << " "; } void lockAndKeyProblem(char lock[], char key[], int n) { map<char, int> hashMap; for(int i = 0; i<n; i++) hashMap[lock[i]] = i; //hash map for locks for(int i = 0; i<n; i++) //for each keys for each lock if(hashMap.find(key[i]) != hashMap.end()) { lock[i] = key[i]; } } int main() { char lock[] = {')','@','*','^','(','%','!','$','&','#'}; char key[] = {'!','(','#','%',')','^','&','*','$','@'}; int n = 10; lockAndKeyProblem(lock, key, n); cout << "After matching Locks and Keys:"<<endl; cout << "Locks: "; show(lock, n); cout << endl; cout << "Keys: "; show(key, n); cout << endl; }
Đầu ra
After matching Locks and Keys: Locks: ! ( # % ) ^ & * $ @ Keys: ! ( # % ) ^ & * $ @