制約付きの最長の部分文字列を見つけるための最良のアルゴリズムは何ですか?

LmTinyToon

残念ながら、次の問題の名前はわかりませんが、よく知られている問題だと思います。問題を解決するための効果的なアルゴリズムを見つけたい。

S-入力文字列、K-いくつかの数値(1 <= K <= 26)とします。

問題は、K個の異なる文字しかないSの最長の部分文字列を見つけることです。この問題を解決するための最良のアルゴリズムは何ですか?

いくつかの例:

1)S = aaaaabcdef、K = 3、回答= aaaaabc

2)S = aaba、K = 2、回答= acaaまたはaaba

3)S = abcde、K = 5、回答= abcde

私はこの問題の解決策のスケッチを持っています。しかし、それは私には難しすぎるように思えます。また、2次の複雑さもあります。したがって、単一の線形パスで、同じ文字のシークエントを1つの適切なカウントで計算できます。次のステップは、K文字のみを含むセットを使用することです。使用法は似ています:

std::string max_string;
for (int i = 0; i < s.size(); ++i)
{
   std::set<int> my_set;
   std::string possible_solution;
   for (int j = i; j < s.size(); ++j)
   {
       // filling set and possible_solution
   }
   if (my_set.size() == K && possible_solution.size() > max_string.size())
      max_string = possible_solution; 
}
グエンできますか

表記法:
s=入力文字列、ゼロベースのインデックス
[start, end)=開始から終了までの入力の部分文字列(含むstartが除外する)end
k-substring=最大k個の異なる文字を含む部分文字列

アルゴリズム:線形の複雑さ O(n)

start = 0
result = empty string
find max(end): [start, end) is a k-substring
LOOP:
  // please note in every loop iteration, [start, end) is a k-substring
  update result=[start, end) if (end-start) > length(result)
  if end >= length(s) then DONE! EXIT
  increase start until [start, end) is a (k-1)-substring
  increase end while [start, end] is a k-substring
ENDLOOP

startまたはendを増やすと、文字プールサイズ(kプロパティがそれぞれ減少または増加するかどうかを確認するには、count []配列を使用できます。ここで、count [c] =現在の部分文字列[start、end)でのcの出現数です。

C ++の実装:http//ideone.com/i2JPCq

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

最長の回文部分文字列を見つけるこのアルゴリズムの時間計算量はどれくらいですか?

分類Dev

KMPアルゴリズムを使用して最長の部分文字列を見つけることは可能ですか?

分類Dev

長さNの文字列のすべてのk番目の文字を削除するための最良のアルゴリズムは何ですか?

分類Dev

PHP-2つの文字列間の類似性を計算するための最良のハッシュアルゴリズムは何ですか?

分類Dev

無向グラフで最長のサイクルの長さを見つけるための効率的なアルゴリズムはありますか?

分類Dev

次数10 ^ 5の完全グラフのEMSTを見つけるための最も単純で最も簡単なアルゴリズムは何ですか

分類Dev

最長のパリンドローム部分文字列を見つけるための解決策の1つを理解できませんでした

分類Dev

Javaで文字列を逆にするための最も効率的なアルゴリズムは何ですか?

分類Dev

perl:最長の部分文字列を見つけるための文字列照合

分類Dev

線に最も近い点のセットから点を見つけるための最速のアルゴリズムは何ですか?

分類Dev

GetHashCodeをオーバーライドするための最良のアルゴリズムは何ですか?

分類Dev

行列の波の中心を見つけるのに最適なアルゴリズムは何ですか?

分類Dev

異なる画像間の類似性を見つけるための最も正確なアルゴリズムは何ですか

分類Dev

2つのソートされた番号の間に欠落している番号を見つけるための最良のアルゴリズムは何ですか?

分類Dev

ベースとパワーの両方がバイナリであるバイナリ値のパワーを見つけるための最良のアルゴリズム方法は何ですか?

分類Dev

検索リストの「最良のトピック」を見つけるためのアルゴリズム-python

分類Dev

類似のテキストを見つけるための最良のアルゴリズム

分類Dev

これは最短経路を見つけるための最良のアルゴリズム(時間計算量)です

分類Dev

abc順で最長の部分文字列を見つける

分類Dev

アルゴリズム:文字列を3つの部分文字列に最適に分割する

分類Dev

製品を注文するときに最良の価格の組み合わせを見つけるためのアルゴリズム

分類Dev

長い文字列で最も長いアルファベットの部分文字列を見つける

分類Dev

いくつかの範囲の更新後に整数配列の最終状態を取得するための効率的なアルゴリズムは何ですか?

分類Dev

単一のセットビットのみで、合計が指定された数に等しい数を見つけるための最良のアルゴリズムは何でしょうか?

分類Dev

最長のアルファベットの部分文字列を見つける-Pythonの概念を理解する

分類Dev

制限なしでunsignedintの最大値を計算するための最良のアルゴリズム。h

分類Dev

長い文字列内の特定の文字列セットを見つけて置き換えるための最適化された方法は何ですか?

分類Dev

数値文字列の次の回文を見つけるためのより良いアルゴリズム

分類Dev

ブロックを配置するための最良の戦略を見つけるためのアルゴリズム

Related 関連記事

  1. 1

    最長の回文部分文字列を見つけるこのアルゴリズムの時間計算量はどれくらいですか?

  2. 2

    KMPアルゴリズムを使用して最長の部分文字列を見つけることは可能ですか?

  3. 3

    長さNの文字列のすべてのk番目の文字を削除するための最良のアルゴリズムは何ですか?

  4. 4

    PHP-2つの文字列間の類似性を計算するための最良のハッシュアルゴリズムは何ですか?

  5. 5

    無向グラフで最長のサイクルの長さを見つけるための効率的なアルゴリズムはありますか?

  6. 6

    次数10 ^ 5の完全グラフのEMSTを見つけるための最も単純で最も簡単なアルゴリズムは何ですか

  7. 7

    最長のパリンドローム部分文字列を見つけるための解決策の1つを理解できませんでした

  8. 8

    Javaで文字列を逆にするための最も効率的なアルゴリズムは何ですか?

  9. 9

    perl:最長の部分文字列を見つけるための文字列照合

  10. 10

    線に最も近い点のセットから点を見つけるための最速のアルゴリズムは何ですか?

  11. 11

    GetHashCodeをオーバーライドするための最良のアルゴリズムは何ですか?

  12. 12

    行列の波の中心を見つけるのに最適なアルゴリズムは何ですか?

  13. 13

    異なる画像間の類似性を見つけるための最も正確なアルゴリズムは何ですか

  14. 14

    2つのソートされた番号の間に欠落している番号を見つけるための最良のアルゴリズムは何ですか?

  15. 15

    ベースとパワーの両方がバイナリであるバイナリ値のパワーを見つけるための最良のアルゴリズム方法は何ですか?

  16. 16

    検索リストの「最良のトピック」を見つけるためのアルゴリズム-python

  17. 17

    類似のテキストを見つけるための最良のアルゴリズム

  18. 18

    これは最短経路を見つけるための最良のアルゴリズム(時間計算量)です

  19. 19

    abc順で最長の部分文字列を見つける

  20. 20

    アルゴリズム:文字列を3つの部分文字列に最適に分割する

  21. 21

    製品を注文するときに最良の価格の組み合わせを見つけるためのアルゴリズム

  22. 22

    長い文字列で最も長いアルファベットの部分文字列を見つける

  23. 23

    いくつかの範囲の更新後に整数配列の最終状態を取得するための効率的なアルゴリズムは何ですか?

  24. 24

    単一のセットビットのみで、合計が指定された数に等しい数を見つけるための最良のアルゴリズムは何でしょうか?

  25. 25

    最長のアルファベットの部分文字列を見つける-Pythonの概念を理解する

  26. 26

    制限なしでunsignedintの最大値を計算するための最良のアルゴリズム。h

  27. 27

    長い文字列内の特定の文字列セットを見つけて置き換えるための最適化された方法は何ですか?

  28. 28

    数値文字列の次の回文を見つけるためのより良いアルゴリズム

  29. 29

    ブロックを配置するための最良の戦略を見つけるためのアルゴリズム

ホットタグ

アーカイブ