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

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


समस्या विवरण

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

उदाहरण

यदि इनपुट है: ["hello","world","mom","dad","try","type","tom"], तो आउटपुट होगा ["dad","try","type"]

हल करने का दृष्टिकोण

इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें:

  • एक सरणी output परिभाषित करें
  • oneRow := true
  • charToRowMap नामक एक मैप परिभाषित करें, जो सभी जोड़े {अक्षर, पंक्ति} लेगा, जहां अक्षर कीबोर्ड पर मौजूद अक्षर है, और पंक्ति कीबोर्ड पर पंक्ति संख्या है।
  • words सरणी में प्रत्येक शब्द के लिए:
    • यदि शब्द खाली नहीं है:
      • oneRow := true
      • row := charToRowMap[tolower(word[0])]
      • i := 1 से आरंभ करें, जब i < शब्द की लंबाई, i को 1 से बढ़ाते हुए:
        • यदि charToRowMap[tolower(word[i])] row के बराबर नहीं है:
          • oneRow := false
          • लूप से बाहर निकलें
      • यदि oneRow शून्येतर है:
        • शब्द को output के अंत में डालें
  • output लौटाएं

C++ कार्यान्वयन

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

void print_vector(vector<string> 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;
    }
};

int main() {
    Solution ob;
    vector<string> v = {"hello","world","mom","dad","try","type","tom"};
    print_vector(ob.findWords(v));
    return 0;
}

इनपुट

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

आउटपुट

[dad, try, type, ]
  1. C++ में ट्री में एक पंक्ति जोड़ें C++ में ट्री में एक पंक्ति जोड़ें

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

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

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

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

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें ट्री के प्रत्येक लेवल का सबसे बड़ा तत्व ढूंढना है। उदाहरण: ट्री [1,3,2,5,3,null,9] के लिए आउटपुट [1,3,9] होगा (लेवल 0: 1, लेवल 1: max(3,2)=3, लेवल 2: max(5,3,9)=9)। DFS + लेवल ट्रैकिंग एक सरणी ans बनाएँ जहाँ ans[level] उस लेवल का अधिकतम मान स्टोर करे।