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

列を削除して、C++でソートされたIIIを作成します


N個の文字列の配列Aがあるとします。各文字列は小文字で構成され、すべて同じ長さです。これで、任意の削除インデックスのセットを選択でき、文字列ごとに、それらのインデックスのすべての文字を削除します。削除後、最終的な配列に辞書式順序のすべての要素が含まれるように、削除インデックスDのセットを取得したとします。シーケンス。

わかりやすくするために、A [0]は辞書式順序(したがって、A [0] [0] <=A [0] [1] <=... <=A [0] [n-1])、A [1 ]は辞書式順序(つまり、A [1] [0] <=A [1] [1] <=... <=A [1] [n-1])などです。 (ここで、nは文字列のサイズです)。 Dのサイズの可能な最小値を見つける必要があります。

したがって、入力が["cbcdb"、 "ccbxc"]の場合、出力は3

になります。

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

  • ret:=0

  • n:=Aのサイズ

  • m:=A [0]

    のサイズ
  • サイズ(m + 1)の配列lisを定義し、これに1を入力します

  • 初期化i:=0の場合、i

    • 初期化j:=0の場合、j

      • ok:=true

      • 初期化k:=0の場合、k

        • A [k、j]> A [k、i]の場合、

          • ok:=false

          • ループから出てきます

      • okがゼロ以外の場合、-

        • lis [i]:=lis [j]+1およびlis[i]

          の最大値
        • ret:=retとlisの最大値[i]

  • retが0と同じ場合、-

    • m-1を返す

  • mを返す-ret

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int minDeletionSize(vector<string>& A){
      int ret = 0;
      int n = A.size();
      int m = A[0].size();
      vector<int> lis(m + 1, 1);
      for (int i = 0; i < m; i++) {
         for (int j = 0; j < i; j++) {
            bool ok = true;
            for (int k = 0; k < n; k++) {
               if (A[k][j] > A[k][i]) {
                  ok = false;
                  break;
               }
            }
            if (ok) {
               lis[i] = max(lis[j] + 1, lis[i]);
               ret = max(ret, lis[i]);
            }
         }
      }
      if (ret == 0)
      return m - 1;
      return m - ret;
   }
};
main(){
   Solution ob;
   vector<string> v = {"cbcdb","ccbxc"};
   cout << (ob.minDeletionSize(v));
}

入力

{"cbcdb","ccbxc"}

出力

3

  1. C++でゲームVをジャンプする

    arrと呼ばれる整数の配列と整数dがあるとします。 1つのステップで、インデックスiから-にジャンプできます。 i + xここで、i +x

  2. Pythonで並べ替える列を削除する

    N個の小文字の文字列の配列があり、配列名がAで、すべての文字列が同じ長さであるとします。これで、削除インデックスの任意のセットを選択でき、文字列ごとに、それらのインデックスのすべての文字を削除できます。 例として、[abcdef、 uvwxyz]のような配列Aがあり、削除インデックスが{0、2、3}の場合、削除後の最終的な配列は[bef、 vyz]、 Aの残りの列は、[b、 v]、[e、 y]、および[f、z]です。 削除後のように削除インデックスDのセットを選択したとすると、Aの残りの各列は降順ではないソート順になります。 Dの長さの可能な最小値を見つける必要があります。 したがって、