C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のキーボード行


単語のリストを考えると、標準のキーボードレイアウトの1行だけでアルファベットの文字を使用して入力できる単語を見つける必要があります。

したがって、入力が["hello"、 "world"、 "mom"、 "dad"、 "try"、 "type"、 "tom"]の場合、出力は["dad"、 "try" 、"type"]

これを解決するには、次の手順に従います-

  • 配列出力を定義する

  • oneRow:=true

  • 1つのマップcharToRowMapを定義します。これにより、{letter、line}、文字はキーボードに存在する文字、lineはキーボードの行番号などのすべてのペアが使用されます。

  • 単語配列内の単語ごとに-

    • 単語が空でない場合、-

      • oneRow:=true

      • 行:=charToRowMap [tolower(word [0])

      • 初期化i:=1の場合、i <ワードのサイズの場合、更新(iを1増やします)、実行-

        • charToRowMap [tolower(word [i])がrowと等しくない場合、-

          • oneRow:=false

          • ループから出てきます

      • 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++の数独ソルバー

    数独グリッドがあり、この有名な数独の迷路問題である数独を解決する必要があるとします。数独は9x9の数字グリッドであり、グリッド全体も3x3のボックスに分割されていることがわかっています。数独を解決するためのルールがいくつかあります。 この問題を解決するには、1から9までの数字を使用する必要があります。 1行、1列、または1つの3x3ボックスで1桁を繰り返すことはできません。 バックトラッキングアルゴリズムを使用して、数独問題の解決を試みます。一部のセルが数字で埋められると、それが有効かどうかをチェックします。無効な場合は、他の番号をチェックします。すべての数字が1から9までチ

  2. C++の各ツリー行で最大値を見つける

    二分木があるとすると、その木の各レベルの最大の要素を見つける必要があります。したがって、ツリーが次のような場合- その場合、出力は[3,5,8]になります。 これを解決するには、次の手順に従います- ansという配列を定義します 再帰関数solve()を定義します。これはツリーノードを取り、レベルは最初は0です。このメソッドは-のように機能します。 ノードがnullの場合は、を返します。 level =ansのサイズの場合、ノード値をansに挿入します。それ以外の場合、ans [level]:=ans[level]とノード値の最大値 呼び出しsol