Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Keyboard Row trong C++


Cho danh sách từ, tìm các từ có thể gõ chỉ dùng các ký tự trên một hàng bàn phím QWERTY chuẩn.

Hàng 1: q w e r t y u i o p
Hàng 2: a s d f g h j k l
Hàng 3: z x c v b n m

Ví dụ: ["hello","world","mom","dad","try","type","tom"] → ["dad","try","type"]

Giải thuật

  1. Tạo map char → hàng cho 26 chữ cái.
  2. Với mỗi từ, xác định hàng của ký tự đầu, kiểm tra các ký tự còn lại có cùng hàng không.
  3. Nếu có, thêm vào kết quả.

Ví dụ triển khai C++

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    vector<string> findWords(vector<string>& words) {
        unordered_map<char, int> row = {
            {'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}
        };
        
        vector<string> res;
        for (string w : words) {
            if (w.empty()) continue;
            int r = row[tolower(w[0])];
            bool ok = true;
            for (char c : w) {
                if (row[tolower(c)] != r) { ok = false; break; }
            }
            if (ok) res.push_back(w);
        }
        return res;
    }
};

void print(vector<string> v) {
    cout << "[";
    for (int i = 0; i < v.size(); i++) cout << v[i] << (i+1

Đầu vào / Đầu ra

Input: {"hello","world","mom","dad","try","type","tom"}
Output: ["dad", "try", "type"]