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

C ++で指定された文字列の一部の文字を削除して、辞書で最大の単語を検索します


辞書と文字列sがあるとします。辞書で最も長い文字列を見つけます。これは、文字列sの一部の文字を削除することで形成できます。 sが「apbreoigroakml」であると仮定します。辞書には{「prog」、「ram」、「program」}があり、結果は「program」になります。

これを解決するために、すべての辞書の単語をトラバースし、各単語について、指定された文字列のサブシーケンスがそのようなすべての単語の中で最も長いかどうかを確認します。最後に、指定された文字列をサブシーケンスとして含む最長の単語を返します。

#include<iostream>
#include<vector>
using namespace std;
bool isSubSequence(string s1, string s2) {
   int m = s1.length(), n = s2.length();
   int j = 0;
   for (int i=0; i<n&&j<m; i++)
   if (s1[j] == s2[i])
      j++;
   return (j==m);
}
string getLongestSubstr(vector <string > dict, string s) {
   string result = "";
   int length = 0;
   for (string word : dict) {
      if (length < word.length() && isSubSequence(word, s)) {
         result = word;
         length = word.length();
      }
   }
   return result;
}
int main() {
   vector <string > dict = {"prog", "ram", "program"};
   string str = "apbreoigroakml" ;
   cout << getLongestSubstr(dict, str) << endl;
}

出力

program

  1. 与えられた2つの文字列で珍しい文字を見つけるC++プログラム

    この記事では、2つの異なる文字列を比較する際に、一般的でない文字を見つけるプログラムについて説明します。 ご存知のように、文字列は文字の配列に他なりません。したがって、比較のために、一方の文字列の文字をトラバースし、同時にその要素がもう一方の文字列に存在するかどうかを確認します。 最初の文字列をA、2番目の文字列をBとすると、 A-Bになります。 。同様に、B-Aを計算できます。 これらの両方の結果を組み合わせると、次のようになります ( A - B ) ∪ ( B - A ) つまり、両方の文字列の中で珍しい要素です。 例 #include <iostream>

  2. 与えられた文字列の順列の数を見つけるためのC++プログラム

    文字列の文字をさまざまな順序で並べることができます。ここでは、特定の文字列から形成できる順列の数をカウントする方法を説明します。 1つの文字列が「abc」の場合はわかります。 3つの文字があります。 3つにアレンジできます! =6つの異なる方法。したがって、n文字の文字列は、nに配置できます。違う方法。しかし、aabのように同じ文字が複数回存在する場合、6つの順列はありません。 aba aab baa baa aab aba ここで、(1,6)、(2、5)、(3,4)は同じです。したがって、ここでは順列の数は3です。これは基本的に(n!)/(複数回発生しているす