Với một danh sách các từ, chúng tôi phải tìm những từ có thể được gõ bằng các chữ cái trong bảng chữ cái chỉ trên một hàng của bố cục bàn phím tiêu chuẩn.
Vì vậy, nếu đầu vào là ["hello", "world", "mom", "dad", "try", "type", "tom"], thì đầu ra sẽ là ["dad", "try" , "loại"]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Xác định đầu ra của mảng
-
oneRow:=true
-
Xác định một bản đồ charToRowMap, điều này sẽ lấy tất cả các cặp như {letter, line}, letter là ký tự có trên bàn phím và line là số dòng trên bàn phím.
-
cho mỗi từ trong mảng từ -
-
nếu từ không trống, thì -
-
oneRow:=true
-
row:=charToRowMap [tolower (word [0])
-
để khởi tạo i:=1, khi tôi
-
nếu charToRowMap [tolower (word [i]) không bằng hàng, thì -
-
oneRow:=false
-
Ra khỏi vòng lặp
-
-
-
nếu oneRow khác 0, thì -
-
chèn từ vào cuối đầu ra
-
-
-
-
trả về kết quả đầu ra
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<string> findWords(vector<string>& words) { vector<string> output; bool oneRow = true; unordered_map<char, int> charToRowMap{ { 'q', 1 }, { 'w', 1 }, { 'e', 1 }, { 'r', 1 }, { 't', 1 }, { 'y', 1 }, { 'u', 1 }, { 'i', 1 }, { 'o', 1 }, { 'p', 1 }, { 'a', 2 }, { 's', 2 }, { 'd', 2 }, { 'f', 2 }, { 'g', 2 }, { 'h', 2 }, { 'j', 2 }, { 'k', 2 }, { 'l', 2 }, { 'z', 3 }, { 'x', 3 }, { 'c', 3 }, { 'v', 3 }, { 'b', 3 }, { 'n', 3 }, { 'm', 3 } }; for (auto word : words) if (!word.empty()) { oneRow = true; int row = charToRowMap[tolower(word[0])]; for (int i = 1; i < word.length(); i++) if (charToRowMap[tolower(word[i])] != row) { oneRow = false; break; } if (oneRow) output.push_back(word); } return output; } }; main(){ Solution ob; vector<string> v = {"hello","world","mom","dad","try","type","tom"}; print_vector(ob.findWords(v)); }
Đầu vào
{"hello","world","mom","dad","try","type","tom"}
Đầu ra
[dad, try, type, ]