Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में कीबोर्ड पंक्ति

शब्दों की एक सूची को देखते हुए, हमें उन शब्दों को खोजना होगा जिन्हें मानक कीबोर्ड लेआउट की केवल एक पंक्ति पर वर्णमाला के अक्षरों का उपयोग करके टाइप किया जा सकता है।

इसलिए, यदि इनपुट ["हैलो", "दुनिया", "माँ", "पिता", "कोशिश", "टाइप", "टॉम"] जैसा है, तो आउटपुट ["पिता", "कोशिश" होगा , "टाइप"]

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • सरणी आउटपुट परिभाषित करें

  • वनरो :=सच

  • एक नक्शा charToRowMap परिभाषित करें, यह सभी जोड़े को इस तरह ले जाएगा कि {लेटर, लाइन}, अक्षर कीबोर्ड पर मौजूद अक्षर है, और लाइन कीबोर्ड पर लाइन नंबर है।

  • शब्द सरणी में प्रत्येक शब्द के लिए -

    • अगर शब्द खाली नहीं है, तो -

      • वनरो :=सच

      • पंक्ति :=charToRowMap[tolower(word[0])

      • इनिशियलाइज़ i :=1 के लिए, जब i <शब्द का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -

        • अगर charToRowMap[tolower(word[i]) पंक्ति के बराबर नहीं है, तो -

          • वनरो :=असत्य

          • लूप से बाहर आएं

      • अगर 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, ]

  1. C++ में पेड़ में एक पंक्ति जोड़ें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमारे पास मूल्य v और गहराई d भी है, हमें दी गई गहराई d पर मान v के साथ नोड्स की एक पंक्ति जोड़नी है। रूट नोड 1 गहराई पर है। इस ऑपरेशन को करने के लिए हमें इस नियम का पालन करना होगा - जैसा कि हम गहराई d जानते हैं, प्रत्येक मान्य ट्री नोड्स N के लिए गहराई d-1

  1. सी++ में सुडोकू सॉल्वर

    मान लीजिए कि हमारे पास सुडोकू ग्रिड है और हमें इस प्रसिद्ध संख्या भूलभुलैया समस्या, सुडोकू को हल करना है। हम जानते हैं कि सुडोकू एक 9 x 9 नंबर का ग्रिड है, और पूरे ग्रिड को भी 3 x 3 बॉक्स में विभाजित किया गया है सुडोकू को हल करने के लिए कुछ नियम हैं। इस समस्या को हल करने के लिए हमें अंक 1 से 9 तक

  1. C++ में प्रत्येक ट्री पंक्ति में सबसे बड़ा मान ज्ञात करें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, तो हमें उस पेड़ के प्रत्येक स्तर के सबसे बड़े तत्वों को खोजना होगा। तो अगर पेड़ जैसा है - तब आउटपुट [3,5,8] . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक सरणी परिभाषित करें जिसे उत्तर कहा जाता है एक पुनरावर्ती फ़ंक्शन को परिभाषित कर