Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

แถวแป้นพิมพ์ใน C++


จากรายชื่อคำ เราต้องหาคำเหล่านั้นที่สามารถพิมพ์ได้โดยใช้ตัวอักษรของรูปแบบแป้นพิมพ์มาตรฐานเพียงแถวเดียว

ดังนั้น หากอินพุตเป็น ["hello","world","mom","dad","try","type","tom"] ผลลัพธ์จะเป็น ["dad","try" ,"ประเภท"]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดเอาต์พุตอาร์เรย์

  • oneRow :=จริง

  • กำหนดหนึ่งแผนที่ charToRowMap ซึ่งจะนำคู่ทั้งหมดเช่น {letter,line} ตัวอักษรคือตัวอักษรที่ปรากฏบนแป้นพิมพ์ และ line คือหมายเลขบรรทัดบนแป้นพิมพ์

  • สำหรับแต่ละคำในอาร์เรย์คำ -

    • ถ้าคำนั้นไม่ว่างเปล่า −

      • oneRow :=จริง

      • แถว :=charToRowMap[tolower(word[0])

      • สำหรับการเริ่มต้น i :=1 เมื่อฉัน <ขนาดของคำ อัปเดต (เพิ่ม i ขึ้น 1) ทำ −

        • ถ้า charToRowMap[tolower(word[i]) ไม่เท่ากับ row ดังนั้น −

          • แถวเดียว :=เท็จ

          • ออกจากวง

      • ถ้า oneRow ไม่ใช่ศูนย์ ดังนั้น −

        • ใส่คำที่ส่วนท้ายของผลลัพธ์

  • ส่งคืนเอาต์พุต

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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));
}

อินพุต

{"hello","world","mom","dad","try","type","tom"}

ผลลัพธ์

[dad, try, type, ]