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

C ++で2番目の文字列に対してスワップを実行した後、2つの文字列間の最長の共通プレフィックスを検索します


2つの文字列str1とstr2があるとします。 2番目の文字列に対してゼロ以上の操作を実行した後、それらの間で最も長い共通プレフィックスを見つけます。各操作で、任意の2文字を入れ替えることができます。したがって、str1 =“ HERE”、str2 =“ THERE”の場合、出力は4になります。2番目の文字列は、文字を入れ替えるだけで“ HERET”にすることができます。したがって、最長のプレフィックスの長さは4です。

私たちが知っているように、私たちはstr2でしか交換できません。また、マトリックスの長さを最大化する必要があります。したがって、str1をトラバースし、str1の現在の文字の頻度がstr2の頻度と同じかそれ以下かどうかを確認するという考え方です。はいの場合は、文字列aで前方に移動します。そうでない場合は、文字列str1で文字が一致する部分の長さを分割して、文字列str2で出力します。

#include <iostream>
using namespace std;
void longestPrefix(string str1, string str2) {
   int frequency[26]={0};
   int a = str1.length();
   int b = str2.length();
   for (int i=0 ;i<b ; i++) {
      frequency[str2[i] - 97] += 1;
   }
   int c = 0;
   for (int i=0 ;i<a ; i++) {
      if (frequency[str1[i] - 97] > 0){
         c += 1;
         frequency[str1[i] - 97] -= 1;
      } else
      break;
   }
   cout<<"Length of longest common prefix: " << c;
}
int main() {
   string str1="here", str2 = "there";
   longestPrefix(str1, str2);
}

出力

Length of longest common prefix: 4

  1. 2つの文字列を連結するC++プログラム

    文字列は、ヌル文字で終了する1次元の文字配列です。 2つの文字列を連結すると、それらを結合して新しい文字列を形成します。たとえば。 String 1: Mangoes are String 2: tasty Concatenation of 2 strings: Mangoes are tasty 2つの文字列を連結するプログラムは次のとおりです。 例 #include <iostream> using namespace std; int main() {    char str1[100] = "Hi...";    

  2. Pythonで3つ以上の文字列から最長の共通部分文字列を見つける方法は?

    最長共通部分文字列アルゴリズムの一般的な動的計画法の実装は、O(nm)時間で実行されます。以下は、最も長い一般的な部分文字列アルゴリズムの実装です。 例 def longest_common_substring(s1, s2):    m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))]    longest, x_longest = 0, 0    for x in xrange(1, 1 + len(s1)):        for y